bob@acornrc.UUCP (Bob Weissman) (01/08/88)
This one's been bothering me for some time. syslog(3) does not correctly do printf-style expansion of %-escapes, due to an extraneous zeroing of a byte. I'd been wanting to include syslog(priority, "SU: %s %s\n", user, tty); in su.c for a while, but it never seemed to work. I finally got around to looking at syslog today. Of course, installing this fix means rebuilding the C library. Sigh. ---------------------------------------- Repeat by: #include <syslog.h> main(argc,argv) int argc; char *argv[]; { syslog(atoi(argv[1]), argv[2], argv[3], argv[4]); } Compile and run with arguments 7, 'TEST: %s %s', X, Y. The entire message does not make it into the syslog file. ---------------------------------------- Fix: *** /usr/src/lib/libc/gen/syslog.c Mon Jun 27 15:06:44 1983 --- ./syslog.c Thu Jan 7 10:19:28 1988 *************** *** 70,76 } c = *f++; if (c != 'm') { ! *b++ = '%', *b++ = c, *b++ = '\0'; continue; } if ((unsigned)errno > sys_nerr) --- 70,76 ----- } c = *f++; if (c != 'm') { ! *b++ = '%', *b++ = c; continue; } if ((unsigned)errno > sys_nerr) ---------------------------------------- -- Bob Weissman Internet: bob@acornrc.UUCP UUCP: ...!{ ames | decwrl | oliveb | apple }!acornrc!bob Arpanet: bob%acornrc.UUCP@AMES.ARPA