]> granicus.if.org Git - shadow/commitdiff
* lib/commonio.c: Added splint annotations.
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 26 Apr 2009 16:48:51 +0000 (16:48 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 26 Apr 2009 16:48:51 +0000 (16:48 +0000)
* lib/commonio.c: old_context should be local to commonio_close(),
not global.

ChangeLog
lib/commonio.c

index 4d5d7e2955742d50bd59892478a28ba77fb64279..3bc8d45b9e7c238cfe860c9b3778a3644aa98aa2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-04-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c: Added splint annotations.
+       * lib/commonio.c: old_context should be local to commonio_close(),
+       not global.
+
 2009-04-26  Nicolas François  <nicolas.francois@centraliens.net>
 
        * src/passwd.c: Do not freecon strings duplicated with strdup.
index d768eebb83dfd6e2eca9a04523f2a40b259b3b0d..d6271f959b334be8986efb67ab6d3c1b2e037715 100644 (file)
@@ -46,7 +46,6 @@
 #include "nscd.h"
 #ifdef WITH_SELINUX
 #include <selinux/selinux.h>
-static /*@null@*/security_context_t old_context = NULL;
 #endif
 #include "prototypes.h"
 #include "commonio.h"
@@ -63,8 +62,7 @@ static int create_backup (const char *, FILE *);
 static void free_linked_list (struct commonio_db *);
 static void add_one_entry (
        struct commonio_db *db,
-       /*@owned@*/struct commonio_entry *p)
-       /*@requires isnull p->next, p->prev@*/;
+       /*@owned@*/struct commonio_entry *p);
 static bool name_is_nis (const char *name);
 static int write_all (const struct commonio_db *);
 static /*@dependent@*/ /*@null@*/struct commonio_entry *find_entry_by_name (
@@ -431,12 +429,19 @@ int commonio_unlock (struct commonio_db *db)
 }
 
 
+/*
+ * Add an entry at the end.
+ *
+ * defines p->next, p->prev
+ * (unfortunately, owned special are not supported)
+ */
 static void add_one_entry (struct commonio_db *db,
                            /*@owned@*/struct commonio_entry *p)
-       /*@requires isnull p->next, p->prev@*/
 {
+       /*@-mustfreeonly@*/
        p->next = NULL;
        p->prev = db->tail;
+       /*@=mustfreeonly@*/
        if (NULL == db->head) {
                db->head = p;
        }
@@ -463,23 +468,26 @@ static bool name_is_nis (const char *name)
 
 #if KEEP_NIS_AT_END
 static void add_one_entry_nis (struct commonio_db *db,
-                               /*@owned@*/struct commonio_entry *newp)
-       /*@requires isnull newp->next, newp->prev@*/;
+                               /*@owned@*/struct commonio_entry *newp);
 
 /*
  * Insert an entry between the regular entries, and the NIS entries.
+ *
+ * defines newp->next, newp->prev
+ * (unfortunately, owned special are not supported)
  */
 static void add_one_entry_nis (struct commonio_db *db,
                                /*@owned@*/struct commonio_entry *newp)
-       /*@requires isnull newp->next, newp->prev@*/
 {
        struct commonio_entry *p;
 
        for (p = db->head; NULL != p; p = p->next) {
                if (name_is_nis (p->eptr ? db->ops->getname (p->eptr)
                                         : p->line)) {
+                       /*@-mustfreeonly@*/
                        newp->next = p;
                        newp->prev = p->prev;
+                       /*@=mustfreeonly@*/
                        if (NULL != p->prev) {
                                p->prev->next = newp;
                        } else {
@@ -784,6 +792,10 @@ int commonio_close (struct commonio_db *db)
        int errors = 0;
        struct stat sb;
 
+#ifdef WITH_SELINUX
+       /*@null@*/security_context_t old_context = NULL;
+#endif
+
        if (!db->isopen) {
                errno = EINVAL;
                return 0;
@@ -890,10 +902,10 @@ int commonio_close (struct commonio_db *db)
 
 #ifdef WITH_SELINUX
        if (db->scontext != NULL) {
+               if (NULL != old_context) {
                if (setfscreatecon (old_context) < 0) {
                        errors++;
                }
-               if (NULL != old_context) {
                        freecon (old_context);
                        old_context = NULL;
                }