[sisyphus] sudoedit: как им пользоваться-то?! :)

Fr. Br. George =?iso-8859-1?q?george_=CE=C1_altlinux=2Eorg?=
Пт Авг 3 19:15:39 MSD 2007


Для начала: Дима, бага в 3b851f7c5e54b0e7445b633804d3d40e8f4aaa37
/getgrouplistfstat

Продублировал в BZ на всякий пожарный. #12462

Дпльше -- лирика:
On Fri, Aug 03, 2007 at 07:45:50PM +0700, Slava Semushin wrote:
> > Не получается приготовить:
> > [c0der на rock ~]$ sudoedit /etc/fstab
> > sudoedit: /etc/fstab: Bad address
> Вопрос остаётся в силе.

> [c0der на rock ~]$ strace sudo -e /etc/fstab
Я бы сказал, что даже интереснее:

strace -Ff sudoedit /etc/fstab
...
11616 <... waitpid resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0)
= 11621
11616 --- SIGCHLD (Child exited) @ 0 (0) --- 
11616 close(4)                          = 0
11616 rt_sigaction(SIGCHLD, {0x804c1d0, [], SA_RESTART}, NULL, 8) = 0 
11616 rt_sigaction(SIGTSTP, {SIG_IGN}, NULL, 8) = 0 
11616 utimes("/var/run/sudo/george/3", NULL) = 0 
11616 time(NULL)                        = 1186149331
11616 send(3, "<85>Aug  3 17:55:31 sudo[11616]:   george : TTY=pts/3 ;
PWD=/home/george ; USER=root ; COMMAND=sudoedit /etc/fstab", 114,
MSG_NOSIGNAL) = 114 
11616 umask(022)                        = 022 
11616 setrlimit(RLIMIT_CORE, {rlim_cur=0, rlim_max=RLIM_INFINITY}) = 0 
11616 stat64("/var/tmp/", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=48,
...}) = 0 
11616 setresuid32(-1, 0, -1)            = 0
11616 open("/etc/fstab", O_RDONLY)      = 4 
11616 stat64(NULL, 0xbf976590)          = -1 EFAULT (Bad address)
11616 close(4)                          = 0
11616 setresuid32(0, 0, 0)              = 0
11616 write(2, "sudoedit: ", 10)        = 10
11616 write(2, "/etc/fstab", 10)        = 10
11616 write(2, ": ", 2)                 = 2
11616 write(2, "Bad address\n", 12)     = 12
11616 exit_group(1)                     = ?
...

Что это за stat64(NULL, 0xbf976590)? 

Проблема здесь:
109     memset(tf, 0, (argc - 1) * sizeof(*tf));
110     for (i = 0, ap = argv + 1; i < argc - 1 && *ap != NULL; i++, ap++) {
111         set_perms(PERM_RUNAS);
112         ofd = open(*ap, O_RDONLY, 0644);
113         if (ofd != -1) {
114 #ifdef HAVE_FSTAT
115             if (fstat(ofd, &sb) != 0) {
116 #else
117             if (stat(tf[i].ofile, &sb) != 0) {
118 #endif
119                 close(ofd);     /* XXX - could reset errno */
120                 ofd = -1;
"sudo_edit.c" 349 стр. --31%-- 

По указанным в начале причинам собирается без fstat. И -- не работает.
Оно, конечно. бага. Но если "getgrouplistfstat" в configure.in поменять на
"getgrouplist fstat", начинает работать. Шаловливые ручонки-с.

-- 
			George V. Kouryachy (aka Fr. Br. George)
			mailto:george at altlinux_org



Подробная информация о списке рассылки Sisyphus