]> granicus.if.org Git - shadow/commitdiff
* lib/tcbfuncs.c: Only FreeBSD specify that the returned buffer is
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Thu, 18 Mar 2010 00:01:00 +0000 (00:01 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Thu, 18 Mar 2010 00:01:00 +0000 (00:01 +0000)
NULL in case of failure. The return value of asprintf shall be
checked.

ChangeLog
lib/tcbfuncs.c

index 5908414786f28a3e5661f5cbb182fbb7aa292967..357b3c12f214d1710b830763cbe4f449ea98cf73 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,9 @@
        * lib/tcbfuncs.h, lib/tcbfuncs.c: Return a shadowtcb_status
        instead of an int.
        * lib/tcbfuncs.c: Do not return in OUT_OF_MEMORY.
+       * lib/tcbfuncs.c: Only FreeBSD specify that the returned buffer is
+       NULL in case of failure. The return value of asprintf shall be
+       checked.
 
 2010-03-17  Nicolas François  <nicolas.francois@centraliens.net>
 
index f4863fd24d8620bb785d19c02ba438011406d479..e86fb43e5639a934f88ac1865b176a4962d33b25 100644 (file)
@@ -74,18 +74,23 @@ static char *shadowtcb_path_rel(const char *name, uid_t uid)
        char *ret;
 
        if (!getdef_bool("TCB_SYMLINKS") || uid < SHADOWTCB_HASH_BY) {
-               asprintf(&ret, "%s", name);
+               if (asprintf(&ret, "%s", name) == -1) {
+                       OUT_OF_MEMORY;
+                       return NULL;
+               }
        } else if (uid < SHADOWTCB_HASH_BY * SHADOWTCB_HASH_BY) {
-               asprintf(&ret, ":%dK/%s", uid / SHADOWTCB_HASH_BY, name);
+               if (asprintf(&ret, ":%dK/%s", uid / SHADOWTCB_HASH_BY, name) == -1) {
+                       OUT_OF_MEMORY;
+                       return NULL;
+               }
        } else {
-               asprintf(&ret, ":%dM/:%dK/%s",
+               if (asprintf(&ret, ":%dM/:%dK/%s",
                        uid / (SHADOWTCB_HASH_BY * SHADOWTCB_HASH_BY),
                        (uid % (SHADOWTCB_HASH_BY * SHADOWTCB_HASH_BY)) / SHADOWTCB_HASH_BY,
-                       name);
-       }
-       if (!ret) {
-               OUT_OF_MEMORY;
-               return NULL;
+                       name) == -1) {
+                       OUT_OF_MEMORY;
+                       return NULL;
+               }
        }
        return ret;
 }
@@ -97,8 +102,7 @@ static char *shadowtcb_path_rel_existing(const char *name)
        char link[8192];
        int ret;
 
-       asprintf(&path, TCB_DIR "/%s", name);
-       if (!path) {
+       if (asprintf(&path, TCB_DIR "/%s", name) == -1) {
                OUT_OF_MEMORY;
                return NULL;
        }
@@ -147,12 +151,12 @@ static char *shadowtcb_path(const char *name, uid_t uid)
 
        if (!(rel = shadowtcb_path_rel(name, uid)))
                return 0;
-       asprintf(&ret, TCB_DIR "/%s", rel);
-       free(rel);
-       if (!ret) {
+       if (asprintf(&ret, TCB_DIR "/%s", rel) == -1) {
                OUT_OF_MEMORY;
+               free(rel);
                return NULL;
        }
+       free(rel);
        return ret;
 }
 
@@ -162,12 +166,12 @@ static char *shadowtcb_path_existing(const char *name)
 
        if (!(rel = shadowtcb_path_rel_existing(name)))
                return 0;
-       asprintf(&ret, TCB_DIR "/%s", rel);
-       free(rel);
-       if (!ret) {
+       if (asprintf(&ret, TCB_DIR "/%s", rel) == -1) {
                OUT_OF_MEMORY;
+               free(rel);
                return NULL;
        }
+       free(rel);
        return ret;
 }
 
@@ -185,8 +189,7 @@ static shadowtcb_status mkdir_leading(const char *name, uid_t uid)
        }
        while ((ind = strchr(ptr, '/'))) {
                *ind = 0;
-               asprintf(&dir, TCB_DIR "/%s", path);
-               if (!dir) {
+               if (asprintf(&dir, TCB_DIR "/%s", path) == -1) {
                        OUT_OF_MEMORY;
                        return SHADOWTCB_FAILURE;
                }
@@ -222,8 +225,7 @@ static shadowtcb_status unlink_suffs(const char *user)
        int i;
 
        for (i = 0; i < 3; i++) {
-               asprintf(&tmp, TCB_FMT "%s", user, suffs[i]);
-               if (!tmp) {
+               if (asprintf(&tmp, TCB_FMT "%s", user, suffs[i]) == -1) {
                        OUT_OF_MEMORY;
                        return SHADOWTCB_FAILURE;
                }
@@ -245,8 +247,7 @@ static shadowtcb_status rmdir_leading(char *path)
        shadowtcb_status ret = SHADOWTCB_SUCCESS;
        while ((ind = strrchr(path, '/'))) {
                *ind = 0;
-               asprintf(&dir, TCB_DIR "/%s", path);
-               if (!dir) {
+               if (asprintf(&dir, TCB_DIR "/%s", path) == -1) {
                        OUT_OF_MEMORY;
                        return SHADOWTCB_FAILURE;
                }
@@ -272,8 +273,7 @@ static shadowtcb_status move_dir(const char *user_newname, uid_t user_newid)
        struct stat oldmode;
        shadowtcb_status ret = SHADOWTCB_FAILURE;
 
-       asprintf(&olddir, TCB_DIR "/%s", stored_tcb_user);
-       if (!olddir)
+       if (asprintf(&olddir, TCB_DIR "/%s", stored_tcb_user) == -1)
                goto out_free_nomem;
        if (stat(olddir, &oldmode)) {
                fprintf(stderr, _("%s: Cannot stat %s: %s\n"), Prog, olddir, strerror(errno));
@@ -303,8 +303,7 @@ static shadowtcb_status move_dir(const char *user_newname, uid_t user_newid)
                fprintf(stderr, _("%s: Cannot remove %s: %s\n"), Prog, olddir, strerror(errno));
                goto out_free;
        }
-       asprintf(&newdir, TCB_DIR "/%s", user_newname);
-       if (!newdir)
+       if (asprintf(&newdir, TCB_DIR "/%s", user_newname) == -1)
                goto out_free_nomem;
        if (!(real_new_dir_rel = shadowtcb_path_rel(user_newname, the_newid)))
                goto out_free;
@@ -340,9 +339,9 @@ shadowtcb_status shadowtcb_set_user(const char* name)
        stored_tcb_user = strdup(name);
        if (!stored_tcb_user) {
                OUT_OF_MEMORY;
+               return SHADOWTCB_FAILURE;
        }
-       asprintf(&buf, TCB_FMT, name);
-       if (!buf) {
+       if (asprintf(&buf, TCB_FMT, name) == -1) {
                OUT_OF_MEMORY;
                return SHADOWTCB_FAILURE;
        }
@@ -364,8 +363,7 @@ shadowtcb_status shadowtcb_remove(const char *name)
                return SHADOWTCB_FAILURE;
        free(path);
        free(rel);
-       asprintf(&path, TCB_DIR "/%s", name);
-       if (!path) {
+       if (asprintf(&path, TCB_DIR "/%s", name) == -1) {
                OUT_OF_MEMORY;
                return SHADOWTCB_FAILURE;
        }
@@ -389,9 +387,8 @@ shadowtcb_status shadowtcb_move(const char *user_newname, uid_t user_newid)
                return SHADOWTCB_FAILURE;
        if (user_newid == -1)
                return SHADOWTCB_SUCCESS;
-       asprintf(&tcbdir, TCB_DIR "/%s", user_newname);
-       asprintf(&shadow, TCB_FMT, user_newname);
-       if (!tcbdir || !shadow) {
+       if (   (asprintf(&tcbdir, TCB_DIR "/%s", user_newname) == -1)
+           || (asprintf(&shadow, TCB_FMT, user_newname) == -1)) {
                OUT_OF_MEMORY;
                return SHADOWTCB_FAILURE;
        }
@@ -470,9 +467,8 @@ shadowtcb_status shadowtcb_create(const char *name, uid_t uid)
                authgid = shadowgid;
        }
        
-       asprintf(&dir, TCB_DIR "/%s", name);
-       asprintf(&shadow, TCB_FMT, name);
-       if (!dir || !shadow) {
+       if (   (asprintf(&dir, TCB_DIR "/%s", name) == -1)
+           || (asprintf(&shadow, TCB_FMT, name) == -1)) {
                OUT_OF_MEMORY;
                return SHADOWTCB_FAILURE;
        }