summaryrefslogtreecommitdiff
path: root/modules/pam_nologin/pam_nologin.c
diff options
context:
space:
mode:
authorThorsten Kukuk <kukuk@thkukuk.de>2004-09-22 09:37:46 +0000
committerThorsten Kukuk <kukuk@thkukuk.de>2004-09-22 09:37:46 +0000
commit6e99aa00d23a68650fdd4fae01aab812dcfe10eb (patch)
tree0b929b30fa38ed1d402515fbf9d7d8cf6dcb5284 /modules/pam_nologin/pam_nologin.c
parente1f75a80821125170e23a9b920d138a4a952c708 (diff)
Relevant BUGIDs:
Purpose of commit: Commit summary: --------------- bugfix: Add rest of Steve Grubb's resource leak and other fixes
Diffstat (limited to 'modules/pam_nologin/pam_nologin.c')
-rw-r--r--modules/pam_nologin/pam_nologin.c35
1 files changed, 22 insertions, 13 deletions
diff --git a/modules/pam_nologin/pam_nologin.c b/modules/pam_nologin/pam_nologin.c
index 6916a7b4..433d2e11 100644
--- a/modules/pam_nologin/pam_nologin.c
+++ b/modules/pam_nologin/pam_nologin.c
@@ -117,22 +117,31 @@ static int perform_check(pam_handle_t *pamh, struct opt_s *opts)
goto clean_up_fd;
}
- read(fd, mtmp, st.st_size);
- mtmp[st.st_size] = '\000';
-
- /*
- * Use conversation function to give user contents of /etc/nologin
- */
+ if (_pammodutil_read(fd, mtmp, st.st_size) == st.st_size) {
+ mtmp[st.st_size] = '\000';
+
+ /*
+ * Use conversation function to give user contents
+ * of /etc/nologin
+ */
+
+ retval = pam_get_item(pamh, PAM_CONV,
+ (const void **)&conversation);
+ if ((retval == PAM_SUCCESS) && (conversation)) {
+ (void) conversation->conv(1,
+ (const struct pam_message **)&pmessage,
+ &resp, conversation->appdata_ptr);
+
+ if (resp) {
+ _pam_drop_reply(resp, 1);
+ }
+ }
+ }
+ else
+ retval = PAM_SYSTEM_ERR;
- pam_get_item(pamh, PAM_CONV, (const void **)&conversation);
- (void) conversation->conv(1, (const struct pam_message **)&pmessage,
- &resp, conversation->appdata_ptr);
free(mtmp);
- if (resp) {
- _pam_drop_reply(resp, 1);
- }
-
clean_up_fd:
close(fd);