Hi, since our manual page doesn't explain the details of how openlog(3) uses *ident, it seems reasonable for users to conclude that it is safest to neither free nor modify it.
Then again, given that in our implementation, freeing it may even pose a security hazard, i might seem friendly to give more details. POSIX has the same wording as our manual page (and so do 4.4BSD-Lite2, FreeBSD, NetBSD, and Oracle Solaris 11). As far as i understand, the wording being in POSIX implies behaviour is unspecified if the memory becomes invalid or if its content is changed. That's also how the Linux man-pages project documents it. I don't think researching history is needed for this; knowing that it's unspecified feels sufficient. Given that our implementation chooses to use-after-free (as it is permitted to) if the memory becomes invalid, i prefer the Theo's strong wording "must persist" to the possibly less discouraging "unspecified" - foremost, we are documenting *our* implementation. Regarding changes of the content, i consider it friendly to mention that it is unspecified - otherwise, people might mistakenly assume that our behaviour were required by POSIX. While here, add the missing pointer to POSIX, correct HISTORY, drop redundant verbiage from RETURN VALUES, and garbage collect .Tn. Admittedly, that's more than one change in one patch, but all of it is fairly standard, so why waste time splitting it. (Still, feel free to OK only parts, of course.) OK? Ingo Index: syslog.3 =================================================================== RCS file: /cvs/src/lib/libc/gen/syslog.3,v retrieving revision 1.35 diff -u -r1.35 syslog.3 --- syslog.3 30 Aug 2019 20:27:25 -0000 1.35 +++ syslog.3 3 Feb 2020 20:16:39 -0000 @@ -216,12 +216,17 @@ .Fn vsyslog . The parameter .Fa ident -is a string that will be prepended to every message. +points to a string that will be prepended to every message; +its storage must persist until +.Fn closelog +or the corresponding +.Fn closelog_r . +If the content of the string is changed, behaviour is unspecified. +.Pp The .Fa logopt argument -is a bit field specifying logging options, which is formed by -.Tn OR Ns 'ing +is a bit field specifying logging options, which is formed by OR'ing one or more of the following values: .Bl -tag -width LOG_AUTHPRIV .It Dv LOG_CONS @@ -310,18 +315,6 @@ .Fa syslog_data structure. .Sh RETURN VALUES -The -.Fn closelog , -.Fn closelog_r , -.Fn openlog , -.Fn openlog_r , -.Fn syslog , -.Fn syslog_r , -.Fn vsyslog , -and -.Fn vsyslog_r -functions return no value. -.Pp The routines .Fn setlogmask and @@ -349,11 +342,58 @@ .Sh SEE ALSO .Xr logger 1 , .Xr syslogd 8 +.Sh STANDARDS +The functions +.Fn syslog , +.Fn openlog , +.Fn closelog , +and +.Fn setlogmask +conform to the X/Open Systems Interfaces option of +.St -p1003.1-2008 . +.Pp +The facilities +.Dv LOG_AUTHPRIV , +.Dv LOG_FTP , +and +.Dv LOG_SYSLOG , +the option +.Dv LOG_PERROR , +and the macro +.Fn LOG_UPTO +are extensions to that standard. +.Pp +The standard option +.Dv LOG_NOWAIT +is deprecated in +.Ox +and has no effect. .Sh HISTORY -These -functions appeared in -.Bx 4.2 . -The reentrant functions appeared in +The functions +.Fn syslog , +.Fn openlog , +and +.Fn closelog +appeared in +.Bx 4.2 , +.Fn setlogmask +in +.Bx 4.3 , +and +.Fn vsyslog +in +.Bx 4.3 Net/1 . +.Pp +The functions +.Fn syslog_r , +.Fn vsyslog_r , +.Fn openlog_r , +.Fn closelog_r , +and +.Fn setlogmask_r +appeared in +.Bx 386 0.1 +and have been available since .Ox 3.1 . .Sh CAVEATS It is important never to pass a string with user-supplied data as a