Changeset 3866 in MondoRescue for branches/3.3/mondo/src/mondorestore


Ignore:
Timestamp:
Mar 7, 2024, 1:55:18 PM (2 years ago)
Author:
Bruno Cornec
Message:

Change find_my_editor and find_home_of_exe to return dynamically assigned stringsi - adapt whine_if_not_found

Location:
branches/3.3/mondo/src/mondorestore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/3.3/mondo/src/mondorestore/mondo-prep.c

    r3859 r3866  
    201201log_it("STARTING");
    202202log_msg(1, "OK, opened i-want-my-lvm. Shutting down LVM volumes...");
    203 if (find_home_of_exe("lvm")) {  // found it :) cool
    204     mr_asprintf(lvscan_sz, "lvm lvscan");
    205     mr_asprintf(lvremove_sz, "lvm lvremove");
    206     mr_asprintf(vgscan_sz, "lvm vgscan");
    207     mr_asprintf(pvscan_sz, "lvm pvscan");
    208     mr_asprintf(vgchange_sz, "lvm vgchange");
    209     mr_asprintf(vgremove_sz, "lvm vgremove -f");
     203if ((tmp = find_home_of_exe("lvm")) != NULL) {  // found it :) cool
     204    mr_asprintf(lvscan_sz, "%s lvscan", tmp);
     205    mr_asprintf(lvremove_sz, "%s lvremove", tmp);
     206    mr_asprintf(vgscan_sz, "%s vgscan", tmp);
     207    mr_asprintf(pvscan_sz, "%s pvscan", tmp);
     208    mr_asprintf(vgchange_sz, "%s vgchange", tmp);
     209    mr_asprintf(vgremove_sz, "%s vgremove -f", tmp);
    210210} else {
    211211    mr_asprintf(lvscan_sz, "lvscan");
     
    216216    mr_asprintf(vgremove_sz, "vgremove");
    217217}
     218mr_free(tmp);
     219
    218220mr_asprintf(cmd, "for i in `%s | cut -d\"'\" -f2 | sort -r` ; do echo \"Shutting down lv $i\" >> %s ; %s -f $i; done", lvscan_sz, MONDO_LOGFILE, lvremove_sz);
    219221mr_free(lvscan_sz);
  • branches/3.3/mondo/src/mondorestore/mondo-rstr-compare.c

    r3822 r3866  
    259259
    260260    if (compressor_exe) {
    261         mr_asprintf(tmp, "%s", compressor_exe);
    262         if (!find_home_of_exe(tmp)) {
     261        if ((tmp = find_home_of_exe(compressor_exe)) == NULL) {
    263262            mr_free(tmp);
    264263            mr_free(compressor_exe);
     
    266265            fatal_error("(compare_a_tarball) Compression program missing");
    267266        }
    268         mr_free(tmp);
    269267
    270268        if (use_star) {
     
    278276        } else {
    279277            // afio
    280             mr_asprintf(tmp, "%s", compressor_exe);
    281             mr_free(compressor_exe);
    282278            mr_asprintf(compressor_exe, "-P %s -Z", tmp);
    283             mr_free(tmp);
    284         }
     279        }
     280        mr_free(tmp);
    285281    }
    286282
     
    541537    if (g_text_mode) {
    542538        save_mountlist_to_disk(mountlist, g_mountlist_fname);
    543         sprintf(tmp, "%s %s", find_my_editor(), g_mountlist_fname);
    544         res = system(tmp);
     539        tmp = find_my_editor();
     540        res = mr_system("%s %s", tmp, g_mountlist_fname);
     541        mr_free(tmp);
    545542        load_mountlist(mountlist, g_mountlist_fname);
    546543    } else {
  • branches/3.3/mondo/src/mondorestore/mondo-rstr-tools.c

    r3854 r3866  
    405405/** malloc **/
    406406char *tmp = NULL;
     407char *tmp1 = NULL;
    407408char *command = NULL;
    408409char *mountdir = NULL;
     
    437438            mr_strcat(additional_parameters, "-o ro");
    438439        }
    439         if (find_home_of_exe("setfattr")) {
     440        if ((tmp = find_home_of_exe("setfattr")) != NULL) {
    440441            mr_strcat(additional_parameters, ",user_xattr");
    441442        }
    442         if (find_home_of_exe("setfacl")) {
     443        mr_free(tmp);
     444        if ((tmp = find_home_of_exe("setfacl")) != NULL) {
    443445            mr_strcat(additional_parameters, ",acl");
    444446        }
     447        mr_free(tmp);
    445448    }
    446449
     
    780783read_cfg_var(cfg_file, "acl", value);
    781784if (strstr(value, "TRUE")) {
    782     mr_asprintf(g_getfacl,"setfacl");
    783     log_msg(1, "We will restore ACLs");
    784     if (! find_home_of_exe("setfacl")) {
     785    if ((tmp = find_home_of_exe("setfacl")) == NULL) {
    785786        log_msg(1, "Unable to restore ACLs as no setfacl found");
    786     }
     787    } else {
     788        mr_asprintf(g_getfacl,"%s", tmp);
     789        log_msg(1, "We will restore ACLs");
     790    }
     791    mr_free(tmp);
    787792}
    788793read_cfg_var(cfg_file, "xattr", value);
    789794if (strstr(value, "TRUE")) {
    790     mr_asprintf(g_getfattr,"setfattr");
    791     log_msg(1, "We will restore XATTRs");
    792     if (! find_home_of_exe("setfattr")) {
     795    if ((tmp = find_home_of_exe("setfattr")) == NULL) {
    793796        log_msg(1, "Unable to restore XATTRs as no setfattr found");
    794     }
     797    } else {
     798        mr_asprintf(g_getfattr,"%s", tmp);
     799        log_msg(1, "We will restore XATTRs");
     800    }
     801    mr_free(tmp);
    795802}
    796803
     
    13901397 * Attempt to find the user's editor.
    13911398 * @return The editor found ("vi" if none could be found).
    1392  * @note The returned string points to static storage that will be overwritten with each call.
     1399 * @note The returned string points to an allocated storage that needs to be freed by caller
    13931400 */
    13941401char *find_my_editor(void) {
    13951402
    1396     static char output[MAX_STR_LEN];
    1397     if (find_home_of_exe("pico")) {
    1398         strcpy(output, "pico");
    1399     } else if (find_home_of_exe("nano")) {
    1400         strcpy(output, "nano");
    1401     } else if (find_home_of_exe("e3em")) {
    1402         strcpy(output, "e3em");
    1403     } else if (find_home_of_exe("e3vi")) {
    1404         strcpy(output, "e3vi");
    1405     } else {
    1406         strcpy(output, "vi");
    1407     }
    1408     if (!find_home_of_exe(output)) {
    1409         log_msg(2, " (find_my_editor) --- warning - %s not found", output);
     1403    char *output = NULL ;
     1404
     1405    if ((output = find_home_of_exe("pico")) == NULL) {
     1406        if ((output = find_home_of_exe("nano")) == NULL) {
     1407            if ((output = find_home_of_exe("e3em")) == NULL) {
     1408                if ((output = find_home_of_exe("e3vi")) == NULL) {
     1409                    if ((output = find_home_of_exe("vim")) == NULL) {
     1410                        output = find_home_of_exe("vi");
     1411                    }
     1412                }
     1413            }
     1414        }
     1415    }
     1416    if (output == NULL) {
     1417        log_msg(2, " (find_my_editor) --- warning - no editor found, even vi");
    14101418    }
    14111419    return (output);
     
    14591467                    popup_and_OK("The mountlist was changed. You will now edit fstab, mtab, device.map and menu.lst/grub.cfg in order to fix grub install");
    14601468                }
    1461                 if (!g_text_mode) {
    1462                     newtSuspend();
     1469                editor = find_my_editor());
     1470                if (editor == NULL) {
     1471                    popup_and_OK("No editor found. You won't be able to edit conf files");
     1472                } else {
     1473                    if (!g_text_mode) {
     1474                        newtSuspend();
     1475                    }
     1476                    mr_asprintf(tmp, "chroot %s %s /etc/fstab", MNT_RESTORING, editor);
     1477                    paranoid_system(tmp);
     1478                    mr_free(tmp);
     1479   
     1480                    mr_asprintf(tmp, "chroot %s %s /etc/mtab", MNT_RESTORING, editor);
     1481                    paranoid_system(tmp);
     1482                    mr_free(tmp);
     1483       
     1484                    if (does_file_exist(MNT_RESTORING"/boot/grub/menu.lst")) {
     1485                        mr_asprintf(tmp, "chroot %s %s /boot/grub/menu.lst", MNT_RESTORING, editor);
     1486                    } else if (does_file_exist(MNT_RESTORING"/boot/grub/grub.cfg")) {
     1487                        mr_asprintf(tmp, "chroot %s %s /boot/grub/grub.cfg", MNT_RESTORING, editor);
     1488                    } else if (does_file_exist(MNT_RESTORING"/boot/grub2/grub.cfg")) {
     1489                        mr_asprintf(tmp, "chroot %s %s /boot/grub2/grub.cfg", MNT_RESTORING, editor);
     1490                    }
     1491                    paranoid_system(tmp);
     1492                    mr_free(tmp);
     1493       
     1494                    if (does_file_exist(MNT_RESTORING"/boot/grub/device.map")) {
     1495                        mr_asprintf(tmp, "chroot %s %s /boot/grub/device.map", MNT_RESTORING, editor);
     1496                    } else if (does_file_exist(MNT_RESTORING"/boot/grub2/device.map")) {
     1497                        mr_asprintf(tmp, "chroot %s %s /boot/grub2/device.map", MNT_RESTORING, editor);
     1498                    }
     1499                    paranoid_system(tmp);
     1500                    mr_free(tmp);
     1501                    if (!g_text_mode) {
     1502                        newtResume();
     1503                    }
    14631504                }
    1464                 mr_asprintf(editor, "%s", find_my_editor());
    1465                 mr_asprintf(tmp, "chroot %s %s /etc/fstab", MNT_RESTORING, editor);
    1466                 paranoid_system(tmp);
    1467                 mr_free(tmp);
    1468 
    1469                 mr_asprintf(tmp, "chroot %s %s /etc/mtab", MNT_RESTORING, editor);
    1470                 paranoid_system(tmp);
    1471                 mr_free(tmp);
    1472    
    1473                 if (does_file_exist(MNT_RESTORING"/boot/grub/menu.lst")) {
    1474                     mr_asprintf(tmp, "chroot %s %s /boot/grub/menu.lst", MNT_RESTORING, editor);
    1475                 } else if (does_file_exist(MNT_RESTORING"/boot/grub/grub.cfg")) {
    1476                     mr_asprintf(tmp, "chroot %s %s /boot/grub/grub.cfg", MNT_RESTORING, editor);
    1477                 } else if (does_file_exist(MNT_RESTORING"/boot/grub2/grub.cfg")) {
    1478                     mr_asprintf(tmp, "chroot %s %s /boot/grub2/grub.cfg", MNT_RESTORING, editor);
    1479                 }
    1480                 paranoid_system(tmp);
    1481                 mr_free(tmp);
    1482    
    1483                 if (does_file_exist(MNT_RESTORING"/boot/grub/device.map")) {
    1484                     mr_asprintf(tmp, "chroot %s %s /boot/grub/device.map", MNT_RESTORING, editor);
    1485                 } else if (does_file_exist(MNT_RESTORING"/boot/grub2/device.map")) {
    1486                     mr_asprintf(tmp, "chroot %s %s /boot/grub2/device.map", MNT_RESTORING, editor);
    1487                 }
    1488                 paranoid_system(tmp);
    1489                 mr_free(tmp);
    14901505                mr_free(editor);
    14911506
    1492                 if (!g_text_mode) {
    1493                     newtResume();
    1494                 }
    14951507                mr_asprintf(command, "mr-stabgrub-me %s", boot_device);
    14961508                res = run_program_and_log_output(command, 1);
     
    15871599
    15881600        if (res) {
    1589             popup_and_OK
    1590                 ("You will now edit fstab and elilo.conf, to make sure they match your new mountlist.");
     1601            popup_and_OK("You will now edit fstab and elilo.conf, to make sure they match your new mountlist.");
    15911602            for (done = FALSE; !done;) {
    1592                 if (!g_text_mode) {
    1593                     newtSuspend();
     1603                editor = find_my_editor();
     1604                if (editor == NULL) {
     1605                    popup_and_OK("No editor found. You won't be able to edit conf files");
     1606                    done = TRUE;
     1607                } else {
     1608
     1609                    if (!g_text_mode) {
     1610                        newtSuspend();
     1611                    }
     1612                    mr_asprintf(tmp, "chroot %s %s /etc/fstab", MNT_RESTORING, editor);
     1613                    paranoid_system(tmp);
     1614                    mr_free(tmp);
     1615   
     1616                    mr_asprintf(tmp, "chroot %s %s /etc/elilo.conf", MNT_RESTORING, editor);
     1617                    paranoid_system(tmp);
     1618                    mr_free(tmp);
     1619                    mr_free(editor);
     1620
     1621                    if (!g_text_mode) {
     1622                        newtResume();
     1623                    }
     1624//              newtCls();
     1625                    if (ask_me_yes_or_no("Edit them again?")) {
     1626                        continue;
     1627                    }
     1628                    done = TRUE;
    15941629                }
    1595                 mr_asprintf(editor, "%s", find_my_editor());
    1596 
    1597                 mr_asprintf(tmp, "chroot %s %s /etc/fstab", MNT_RESTORING, editor);
    1598                 paranoid_system(tmp);
    1599                 mr_free(tmp);
    1600 
    1601                 mr_asprintf(tmp, "chroot %s %s /etc/elilo.conf", MNT_RESTORING, editor);
    1602                 paranoid_system(tmp);
    1603                 mr_free(tmp);
    16041630                mr_free(editor);
    1605 
    1606                 if (!g_text_mode) {
    1607                     newtResume();
    1608                 }
    1609 //              newtCls();
    1610                 if (ask_me_yes_or_no("Edit them again?")) {
    1611                     continue;
    1612                 }
    1613                 done = TRUE;
    16141631            }
    16151632        } else {
     
    16661683                ("You will now edit fstab and lilo.conf, to make sure they match your new mountlist.");
    16671684            for (done = FALSE; !done;) {
    1668                 if (!g_text_mode) {
    1669                     newtSuspend();
     1685                editor = find_my_editor();
     1686                if (editor == NULL) {
     1687                    popup_and_OK("No editor found. You won't be able to edit conf files");
     1688                } else {
     1689                    if (!g_text_mode) {
     1690                        newtSuspend();
     1691                    }
     1692                    mr_asprintf(tmp, "%s " MNT_RESTORING "/etc/fstab", editor);
     1693                    paranoid_system(tmp);
     1694                    mr_free(tmp);
     1695   
     1696                    mr_asprintf(tmp, "%s " MNT_RESTORING "/etc/lilo.conf", editor);
     1697                    paranoid_system(tmp);
     1698                    mr_free(tmp);
     1699                    mr_free(editor);
     1700   
     1701                    if (!g_text_mode) {
     1702                        newtResume();
     1703                    }
     1704//              newtCls();
     1705                    if (ask_me_yes_or_no("Edit them again?")) {
     1706                        continue;
     1707                    }
    16701708                }
    1671                 mr_asprintf(editor, "%s", find_my_editor());
    1672 
    1673                 mr_asprintf(tmp, "%s " MNT_RESTORING "/etc/fstab", editor);
    1674                 paranoid_system(tmp);
    1675                 mr_free(tmp);
    1676 
    1677                 mr_asprintf(tmp, "%s " MNT_RESTORING "/etc/lilo.conf", editor);
    1678                 paranoid_system(tmp);
    1679                 mr_free(tmp);
    16801709                mr_free(editor);
    16811710
    1682                 if (!g_text_mode) {
    1683                     newtResume();
    1684                 }
    1685 //              newtCls();
    1686                 if (ask_me_yes_or_no("Edit them again?")) {
    1687                     continue;
    1688                 }
    1689                 res =
    1690                     run_program_and_log_output("chroot " MNT_RESTORING
    1691                                                " lilo -L", 3);
     1711                res = run_program_and_log_output("chroot " MNT_RESTORING " lilo -L", 3);
    16921712                if (res) {
    1693                     res =
    1694                         run_program_and_log_output("chroot " MNT_RESTORING
    1695                                                    " lilo", 3);
     1713                    res = run_program_and_log_output("chroot " MNT_RESTORING " lilo", 3);
    16961714                }
    16971715                if (res) {
    1698                     done =
    1699                         ask_me_yes_or_no
    1700                         ("LILO failed. Re-edit system files?");
     1716                    done = ask_me_yes_or_no("LILO failed. Re-edit system files?");
    17011717                } else {
    17021718                    done = TRUE;
     
    17681784        mvaddstr_and_log_it(g_currentY, 0, "Modifying fstab and restoring MBR...                           ");
    17691785        for (done = FALSE; !done;) {
    1770             if (!run_program_and_log_output("which vi", FALSE)) {
    1771                 popup_and_OK("You will now edit fstab");
     1786            popup_and_OK("You will now edit fstab");
     1787            editor = find_my_editor());
     1788            if (editor == NULL) {
     1789                popup_and_OK("No editor found. You won't be able to edit conf files");
     1790            } else {
    17721791                if (!g_text_mode) {
    17731792                    newtSuspend();
    17741793                }
    1775                 mr_asprintf(editor, "%s", find_my_editor());
    17761794                mr_asprintf(tmp, "%s " MNT_RESTORING "/etc/fstab", editor);
    1777                 mr_free(editor);
    17781795
    17791796                paranoid_system(tmp);
     
    17831800                }
    17841801            }
     1802            mr_free(editor);
     1803
    17851804            popup_and_get_string("Boot device", "Please confirm/enter the boot device. If in doubt, try /dev/hda", boot_device, MAX_STR_LEN / 4);
    17861805            mr_asprintf(command, "mr-stabraw-me %s", boot_device);
  • branches/3.3/mondo/src/mondorestore/mondo-rstr-tools.h

    r2682 r3866  
    2020int run_elilo(bool);
    2121int run_raw_mbr(bool offer_to_hack_scripts, char *bd);
    22 char *find_my_editor(void);
    2322void streamline_changes_file(char *, char *);
    2423void set_signals(int on);
  • branches/3.3/mondo/src/mondorestore/mondorestore.c

    r3862 r3866  
    207207    mr_asprintf(tmp1,"%s/var/lib/multipath/bindings",bkpinfo->restore_path);
    208208    (void)unlink(tmp1);
    209     paranoid_free(tmp1);
     209    mr_free(tmp1);
    210210
    211211    /* Edit multipath.conf if needed to adapt wwid */
     
    214214        log_msg(2, "We may need to clean /etc/multipath.conf");
    215215    } else {
    216         paranoid_free(tmp1);
     216        mr_free(tmp1);
    217217        return;
    218218    }
    219     paranoid_free(tmp1);
     219    mr_free(tmp1);
    220220
    221221    if (bkpinfo->restore_mode != nuke) {
    222         mr_asprintf(editor, "%s", find_my_editor());
     222        editor = find_my_editor();
    223223        mr_asprintf(tmp1,"chroot %s %s /etc/multipath.conf", MNT_RESTORING, editor);
    224224        popup_and_OK("You will now edit multipath.conf");
     
    230230            newtResume();
    231231        }
    232         paranoid_free(tmp1);
    233         paranoid_free(editor);
     232        mr_free(tmp1);
     233        mr_free(editor);
    234234    } else {
    235235        log_to_screen("Non-interactive mode: no way to give you the keyboard so that you edit your multipath.conf. Hope it's OK");
     
    17671767
    17681768    log_msg(1, "restoring everything");
    1769     if (!find_home_of_exe("petris") && !g_text_mode) {
     1769    if (((tmp = find_home_of_exe("petris")) != NULL) && !g_text_mode) {
    17701770        newtDrawRootText(0, g_noof_rows - 2,
    17711771                         "Press ALT-<left cursor> twice to play Petris :-) ");
    17721772        newtRefresh();
    17731773    }
     1774    mr_free(tmp);
    17741775    mvaddstr_and_log_it(g_currentY, 0, "Preparing to read your archives");
    17751776    mount_media();
     
    18421843
    18431844  /** needs malloc **********/
     1845    char *tmp = NULL;
    18441846    char *tmp1 = NULL;
    18451847    char *fstab_fname = NULL;
     
    18811883        if (g_text_mode) {
    18821884            save_mountlist_to_disk(mountlist, g_mountlist_fname);
    1883             mr_asprintf(tmp1, "%s %s", find_my_editor(), g_mountlist_fname);
     1885            tmp = find_my_editor();
     1886            mr_asprintf(tmp1, "%s %s", tmp, g_mountlist_fname);
     1887            mr_free(tmp);
    18841888            res = system(tmp1);
    18851889            mr_free(tmp1);
Note: See TracChangeset for help on using the changeset viewer.