]> granicus.if.org Git - linux-pam/commitdiff
Relevant BUGIDs:
authorTomas Mraz <tm@t8m.info>
Sat, 17 Sep 2005 08:47:39 +0000 (08:47 +0000)
committerTomas Mraz <tm@t8m.info>
Sat, 17 Sep 2005 08:47:39 +0000 (08:47 +0000)
Purpose of commit: cleanup

Commit summary:
---------------
Better check the input parameters of pam_start (by ldv)

libpam/pam_start.c

index bf7c9af952948fbfc136467383ae6bed73c7fcc6..63f58f5beacb6b957f2462639b74829d36850c7a 100644 (file)
@@ -27,7 +27,19 @@ int pam_start (
     if (pamh == NULL) {
        pam_syslog(NULL, LOG_CRIT,
                   "pam_start: invalid argument: pamh == NULL");
-       return (PAM_BUF_ERR);
+       return (PAM_SYSTEM_ERR);
+    }
+
+    if (service_name == NULL) {
+       pam_syslog(NULL, LOG_CRIT,
+                  "pam_start: invalid argument: service == NULL");
+       return (PAM_SYSTEM_ERR);
+    }
+
+    if (pam_conversation == NULL) {
+       pam_syslog(NULL, LOG_CRIT,
+                  "pam_start: invalid argument: conv == NULL");
+       return (PAM_SYSTEM_ERR);
     }
 
     if ((*pamh = calloc(1, sizeof(**pamh))) == NULL) {
@@ -45,19 +57,17 @@ int pam_start (
 
     __PAM_TO_APP(*pamh);
 
-    if (service_name) {
+    if (((*pamh)->service_name = _pam_strdup(service_name)) == NULL) {
+       pam_syslog(*pamh, LOG_CRIT,
+                  "pam_start: _pam_strdup failed for service name");
+       _pam_drop(*pamh);
+       return (PAM_BUF_ERR);
+    } else {
        char *tmp;
 
-       if (((*pamh)->service_name = _pam_strdup(service_name)) == NULL) {
-           pam_syslog(*pamh, LOG_CRIT,
-                      "pam_start: _pam_strdup failed for service name");
-           _pam_drop(*pamh);
-           return (PAM_BUF_ERR);
-       }
        for (tmp=(*pamh)->service_name; *tmp; ++tmp)
            *tmp = tolower(*tmp);                   /* require lower case */
-    } else
-               (*pamh)->service_name = NULL;
+    }
 
     if (user) {
        if (((*pamh)->user = _pam_strdup(user)) == NULL) {
@@ -79,9 +89,8 @@ int pam_start (
     (*pamh)->fail_delay.delay_fn_ptr = NULL;
     (*pamh)->former.choice = PAM_NOT_STACKED;
 
-    if (pam_conversation == NULL
-       || ((*pamh)->pam_conversation = (struct pam_conv *)
-           malloc(sizeof(struct pam_conv))) == NULL) {
+    if (((*pamh)->pam_conversation = (struct pam_conv *)
+         malloc(sizeof(struct pam_conv))) == NULL) {
        pam_syslog(*pamh, LOG_CRIT, "pam_start: malloc failed for pam_conv");
        _pam_drop((*pamh)->service_name);
        _pam_drop((*pamh)->user);