]> granicus.if.org Git - sudo/commitdiff
sys_signame on macOS contains lower-cases names
authorTodd C. Miller <Todd.Miller@sudo.ws>
Mon, 19 Aug 2019 20:25:05 +0000 (14:25 -0600)
committerTodd C. Miller <Todd.Miller@sudo.ws>
Mon, 19 Aug 2019 20:25:05 +0000 (14:25 -0600)
lib/util/sig2str.c
lib/util/str2sig.c

index 6049b1b2c63ed2234a27852df2b9cd15d1f44b31..acd7d0f512b3e43ad0e853be8995ac3581a6665f 100644 (file)
@@ -36,6 +36,7 @@
 #ifdef HAVE_STRINGS_H
 # include <strings.h>
 #endif /* HAVE_STRINGS_H */
+#include <ctype.h>
 #include <signal.h>
 #include <unistd.h>
 
@@ -83,6 +84,12 @@ sudo_sig2str(int signo, char *signame)
 #endif
     if (signo > 0 && signo < NSIG && sudo_sys_signame[signo] != NULL) {
        strlcpy(signame, sudo_sys_signame[signo], SIG2STR_MAX);
+       /* Make sure we always return an upper case signame. */
+       if (islower((unsigned char)signame[0])) {
+           int i;
+           for (i = 0; signame[i] != '\0'; i++)
+               signame[i] = toupper((unsigned char)signame[i]);
+       }
        return 0;
     }
     errno = EINVAL;
index 63ea642cc30b829373ea416726a8134411d11836..fd005238759da203e9f2392447ff7a536df8d87a 100644 (file)
@@ -154,7 +154,8 @@ sudo_str2sig(const char *signame, int *result)
     /* Check sys_signame[]. */
     for (signo = 1; signo < NSIG; signo++) {
        if (sudo_sys_signame[signo] != NULL) {
-           if (strcmp(signame, sudo_sys_signame[signo]) == 0) {
+           /* On macOS sys_signame[] may contain lower-case names. */
+           if (strcasecmp(signame, sudo_sys_signame[signo]) == 0) {
                *result = signo;
                return 0;
            }