Hello Sergey, On Fri, Oct 12, 2001 at 02:08:37PM +0400, Sergey N.Yatskevich wrote: > > Привет всем! > > В userdel обнаружилась ошибка. Там для пущей безопасности при > удалении с ключем -r домашней директории проверяется не > будет ли заодно удалена домашняя директория еще какого-нибудь > пользователя. > > Делается это путем: > strncmp ('дир.уд.польз.', 'дир.другого польз', strlen ('дир.уд.польз.')); > Оно бы нормально работало, если бы имена директорий завершались '/'. > > Однако это не так и поэтому при существовании двух пользователей: > > test > test2 > > При попытке сделать userdel -r test будет выдано сообщение об ошибке :-)) > и директория /home/test удалена не будет. > > Патч для исправления прилагается (+ подправленный spec). Позвольте мне немного программерского занудства. + /* check if s1 is s2 or it's path prefix */ + return ((strcmp (s1, s2) == 0) || + ((strlen (s2) > strlen (s1)) && + (strncmp(s2, s1, strlen(s1)) == 0) && + (s2[strlen (s1)] == '/'))); Здесь три раза вычисляется strlen(s1). Нехорошо. И вызов strcmp, пожалуй что, лишний. Лучше так: size_t s1len; ... s1len = strlen(s1); return (strncmp(s2, s1, s1len) == 0 && (s2[s1len] == '\0' || s2[s1len] == '/')); P.S. А если у кого-то домкаталог записан через точечки? А если через символьные ссылки? Впрочем, кара за подобное непотребство должна быть суровой :) -- Stay tuned, MhZ JID: mookid@jabber.org ___________ Woolsey-Swanson Rule: People would rather live with a problem they cannot solve rather than accept a solution they cannot understand.