diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2018-08-15 22:22:31 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2018-08-15 22:22:31 +0300 |
commit | 7a40b7873bd666809183cdd952d6e2a8f1870981 (patch) | |
tree | 0ae71532dc78f597b717152b564d6681d1ad832a | |
parent | 988b8e27f5df26d7e9f6fd7984677873ca1c40cb (diff) | |
download | pam-modules-7a40b7873bd666809183cdd952d6e2a8f1870981.tar.gz pam-modules-7a40b7873bd666809183cdd952d6e2a8f1870981.tar.bz2 |
Major cleanup
* lib/graypam.h (gray_pam_init)
(gray_raise,gray_malloc,gray_zalloc,gray_calloc)
(gray_realloc,gray_strdup): Remove.
(gray_slist_err,gray_slist_clrerr): New functions.
(gray_slist_append,gray_slist_append_char): Return ssize_t.
(gray_slist_coalesce): Likewise.
(gray_slist_grow_backslash_num)
(gray_slist_grow_backslash): Return int.
(errno_to_pam): New function.
(gray_set_transform_expr): Return int.
* lib/mem.c (gray_raise,gray_malloc,gray_zalloc,gray_calloc)
(gray_realloc,gray_strdup): Remove.
(gray_2nrealloc): Rewrite.
* lib/base64.c: Check return from gray_slist_append_char
* lib/env.c: Check return values from gray_slist functions
* lib/ldappass.c: Likewise.
* lib/slist.c (gray_slist_bucket) <ec>: New member.
(gray_slist_err,gray_slist_clrerr): New functions.
(gray_slist_append,gray_slist_append_char): Return ssize_t.
(gray_slist_coalesce): Likewise.
(gray_slist_grow_backslash_num)
(gray_slist_grow_backslash): Return int.
* lib/transform.c: Use standard memory allocation functions.
* pam_ldaphome/pam_ldaphome.c: Likewise.
* pam_innetgr/pam_innetgr.c: Likewise.
* pam_log/pam_log.c: Likewise.
* pam_regex/pam_regex.c: Likewise.
* pam_sql/pam_mysql.c: Likewise.
* pam_sql/pam_pgsql.c: Likewise.
-rw-r--r-- | lib/base64.c | 20 | ||||
-rw-r--r-- | lib/env.c | 66 | ||||
-rw-r--r-- | lib/graypam.h | 50 | ||||
-rw-r--r-- | lib/ldappass.c | 107 | ||||
-rw-r--r-- | lib/mem.c | 81 | ||||
-rw-r--r-- | lib/slist.c | 127 | ||||
-rw-r--r-- | lib/transform.c | 244 | ||||
-rw-r--r-- | pam_groupmember/pam_groupmember.c | 1 | ||||
-rw-r--r-- | pam_innetgr/pam_innetgr.c | 1 | ||||
-rw-r--r-- | pam_ldaphome/pam_ldaphome.c | 306 | ||||
-rw-r--r-- | pam_log/pam_log.c | 48 | ||||
-rw-r--r-- | pam_regex/pam_regex.c | 26 | ||||
-rw-r--r-- | pam_sql/pam_mysql.c | 14 | ||||
-rw-r--r-- | pam_sql/pam_pgsql.c | 18 | ||||
-rw-r--r-- | pam_sql/pam_sql.c | 81 | ||||
-rw-r--r-- | pam_sql/pam_sql.h | 5 | ||||
-rw-r--r-- | pam_umotd/pam_umotd.c | 49 |
17 files changed, 788 insertions, 456 deletions
diff --git a/lib/base64.c b/lib/base64.c index 85b974a..9d0191e 100644 --- a/lib/base64.c +++ b/lib/base64.c | |||
@@ -51,19 +51,25 @@ gray_base64_decode(gray_slist_t slist, const char *iptr, size_t isize) | |||
51 | } | 51 | } |
52 | } | 52 | } |
53 | 53 | ||
54 | /* I have a entire block of data 32 bits get the output | 54 | /* I have a entire block of data 32 bits get the output |
55 | data. */ | 55 | data. */ |
56 | if (i == 4) { | 56 | if (i == 4) { |
57 | gray_slist_append_char(slist, | 57 | if (gray_slist_append_char(slist, |
58 | (data[0] << 2) | ((data[1] & 0x30) >> 4)); | 58 | (data[0] << 2) | ((data[1] & 0x30) >> 4)) != 1) |
59 | gray_slist_append_char(slist, | 59 | return -1; |
60 | ((data[1] & 0xf) << 4) | ((data[2] & 0x3c) >> 2)); | 60 | if (gray_slist_append_char(slist, |
61 | gray_slist_append_char(slist, | 61 | ((data[1] & 0xf) << 4) | ((data[2] & 0x3c) >> 2)) |
62 | ((data[2] & 0x3) << 6) | data[3]); | 62 | != 1) |
63 | return -1; | ||
64 | if (gray_slist_append_char(slist, | ||
65 | ((data[2] & 0x3) << 6) | data[3]) != 1) | ||
66 | return -1; | ||
63 | nbytes += 3 - pad; | 67 | nbytes += 3 - pad; |
64 | } else | 68 | } else { |
69 | errno = EILSEQ; | ||
65 | return -1; | 70 | return -1; |
71 | } | ||
66 | i = 0; | 72 | i = 0; |
67 | } | 73 | } |
68 | return nbytes; | 74 | return nbytes; |
69 | } | 75 | } |
@@ -91,34 +91,45 @@ gray_env_read_tr(const char *file_name, struct gray_env **penv, char **trmap) | |||
91 | if (!fp) { | 91 | if (!fp) { |
92 | _pam_log(LOG_ERR, "cannot open configuration file `%s': %s", | 92 | _pam_log(LOG_ERR, "cannot open configuration file `%s': %s", |
93 | file_name, strerror (errno)); | 93 | file_name, strerror (errno)); |
94 | return 1; | 94 | return 1; |
95 | } | 95 | } |
96 | 96 | ||
97 | while (p = fgets(buf, sizeof buf, fp)) { | 97 | while ((p = fgets(buf, sizeof buf, fp))) { |
98 | int len; | 98 | int len; |
99 | struct gray_env *env; | 99 | struct gray_env *env; |
100 | 100 | ||
101 | line++; | 101 | line++; |
102 | while (*p && isspace(*p)) | 102 | while (*p && isspace(*p)) |
103 | p++; | 103 | p++; |
104 | len = strlen(p); | 104 | len = strlen(p); |
105 | if (len == 0) | 105 | if (len == 0) |
106 | continue; | 106 | continue; |
107 | if (p[len-1] != '\n') { | 107 | if (p[len-1] != '\n') { |
108 | if (!slist) | 108 | if (!slist) { |
109 | slist = gray_slist_create(); | 109 | slist = gray_slist_create(); |
110 | gray_slist_append(slist, p, len); | 110 | if (!slist) { |
111 | while (p = fgets(buf, sizeof buf, fp)) { | 111 | rc = errno; |
112 | break; | ||
113 | } | ||
114 | } | ||
115 | if (gray_slist_append(slist, p, len) != len) { | ||
116 | rc = errno; | ||
117 | break; | ||
118 | } | ||
119 | while ((p = fgets(buf, sizeof buf, fp))) { | ||
112 | len = strlen(p); | 120 | len = strlen(p); |
113 | gray_slist_append(slist, p, len); | 121 | gray_slist_append(slist, p, len); |
114 | if (p[len - 1] == '\n') | 122 | if (p[len - 1] == '\n') |
115 | break; | 123 | break; |
116 | } | 124 | } |
117 | gray_slist_append_char(slist, 0); | 125 | if (gray_slist_append_char(slist, 0) != 1 |
118 | p = gray_slist_finish(slist); | 126 | || (p = gray_slist_finish(slist)) == NULL) { |
127 | rc = errno; | ||
128 | break; | ||
129 | } | ||
119 | len = strlen(p); | 130 | len = strlen(p); |
120 | } | 131 | } |
121 | 132 | ||
122 | p[len-1] = 0; | 133 | p[len-1] = 0; |
123 | len = gray_trim_ws(p); | 134 | len = gray_trim_ws(p); |
124 | 135 | ||
@@ -126,16 +137,25 @@ gray_env_read_tr(const char *file_name, struct gray_env **penv, char **trmap) | |||
126 | continue; | 137 | continue; |
127 | 138 | ||
128 | if (p[len-1] == '\\') { | 139 | if (p[len-1] == '\\') { |
129 | int err = 0; | 140 | int err = 0; |
130 | 141 | ||
131 | /* Collect continuation lines */ | 142 | /* Collect continuation lines */ |
132 | if (!slist) | 143 | if (!slist) { |
133 | slist = gray_slist_create(); | 144 | slist = gray_slist_create(); |
145 | if (!slist) { | ||
146 | rc = errno; | ||
147 | break; | ||
148 | } | ||
149 | } | ||
134 | do { | 150 | do { |
135 | gray_slist_append(slist, p, len - 1); | 151 | if (gray_slist_append(slist, p, len - 1) |
152 | != len - 1) { | ||
153 | rc = errno; | ||
154 | break; | ||
155 | } | ||
136 | p = fgets (buf, sizeof buf, fp); | 156 | p = fgets (buf, sizeof buf, fp); |
137 | if (!p) | 157 | if (!p) |
138 | break; | 158 | break; |
139 | line++; | 159 | line++; |
140 | len = strlen(p); | 160 | len = strlen(p); |
141 | if (len == 0) | 161 | if (len == 0) |
@@ -147,32 +167,39 @@ gray_env_read_tr(const char *file_name, struct gray_env **penv, char **trmap) | |||
147 | err = 1; | 167 | err = 1; |
148 | break; | 168 | break; |
149 | } | 169 | } |
150 | p[len-1] = 0; | 170 | p[len-1] = 0; |
151 | len = gray_trim_ws(p); | 171 | len = gray_trim_ws(p); |
152 | } while (p[len-1] == '\\'); | 172 | } while (p[len-1] == '\\'); |
153 | if (len) | 173 | if (rc) |
154 | gray_slist_append(slist, p, len); | 174 | break; |
155 | gray_slist_append_char(slist, 0); | 175 | if (len) { |
156 | p = gray_slist_finish(slist); | 176 | if (gray_slist_append(slist, p, len) != len) { |
177 | rc = errno; | ||
178 | break; | ||
179 | } | ||
180 | } | ||
181 | if (gray_slist_append_char(slist, 0) != 1 | ||
182 | || (p = gray_slist_finish(slist)) == NULL) { | ||
183 | rc = errno; | ||
184 | break; | ||
185 | } | ||
157 | if (err) | 186 | if (err) |
158 | continue; | 187 | continue; |
159 | } | 188 | } |
160 | 189 | ||
161 | env = malloc(sizeof *env); | 190 | env = malloc(sizeof *env); |
162 | if (!env) { | 191 | if (!env) { |
163 | _pam_log(LOG_EMERG, "not enough memory"); | 192 | rc = errno; |
164 | rc = 1; | ||
165 | break; | 193 | break; |
166 | } | 194 | } |
167 | 195 | ||
168 | env->name = strdup(p); | 196 | env->name = strdup(p); |
169 | if (!env->name) { | 197 | if (!env->name) { |
170 | _pam_log(LOG_EMERG, "not enough memory"); | 198 | rc = errno; |
171 | free(env); | 199 | free(env); |
172 | rc = 1; | ||
173 | break; | 200 | break; |
174 | } | 201 | } |
175 | 202 | ||
176 | for (p = env->name; *p && !isspace(*p); p++) | 203 | for (p = env->name; *p && !isspace(*p); p++) |
177 | ; | 204 | ; |
178 | if (*p) | 205 | if (*p) |
@@ -192,13 +219,18 @@ gray_env_read_tr(const char *file_name, struct gray_env **penv, char **trmap) | |||
192 | env->next = config_env; | 219 | env->next = config_env; |
193 | config_env = env; | < |