]> git.pld-linux.org Git - packages/pam.git/blob - pam-set-item.patch
- rel 1
[packages/pam.git] / pam-set-item.patch
1 Index: pam_item.c
2 ===================================================================
3 RCS file: /cvsroot/pam/Linux-PAM/libpam/pam_item.c,v
4 retrieving revision 1.16
5 diff -u -p -r1.16 pam_item.c
6 --- libpam/pam_item.c   3 Mar 2008 13:23:45 -0000       1.16
7 +++ libpam/pam_item.c   7 Apr 2008 09:04:50 -0000
8 @@ -11,13 +11,15 @@
9  #include <string.h>
10  #include <syslog.h>
11  
12 -#define TRY_SET(X, Y)                  \
13 -{                                      \
14 -    char *_TMP_ = _pam_strdup(Y);      \
15 -    if (_TMP_ == NULL && (Y) != NULL)  \
16 -        return PAM_BUF_ERR;           \
17 -    free(X);                           \
18 -    (X) = _TMP_;                       \
19 +#define TRY_SET(X, Y)                      \
20 +{                                          \
21 +    if ((X) != (Y)) {                     \
22 +       char *_TMP_ = _pam_strdup(Y);      \
23 +       if (_TMP_ == NULL && (Y) != NULL)  \
24 +           return PAM_BUF_ERR;            \
25 +       free(X);                           \
26 +       (X) = _TMP_;                       \
27 +    }                                     \
28  }
29  
30  /* functions */
31 @@ -76,8 +78,10 @@ int pam_set_item (pam_handle_t *pamh, in
32          * modules.
33          */
34         if (__PAM_FROM_MODULE(pamh)) {
35 -           _pam_overwrite(pamh->authtok);
36 -           TRY_SET(pamh->authtok, item);
37 +           if (pamh->authtok != item) {
38 +               _pam_overwrite(pamh->authtok);
39 +               TRY_SET(pamh->authtok, item);
40 +           }
41         } else {
42             retval = PAM_BAD_ITEM;
43         }
44 @@ -90,8 +94,10 @@ int pam_set_item (pam_handle_t *pamh, in
45          * modules.
46          */
47         if (__PAM_FROM_MODULE(pamh)) {
48 -           _pam_overwrite(pamh->oldauthtok);
49 -           TRY_SET(pamh->oldauthtok, item);
50 +           if (pamh->oldauthtok != item) {
51 +               _pam_overwrite(pamh->oldauthtok);
52 +               TRY_SET(pamh->oldauthtok, item);
53 +           }
54         } else {
55             retval = PAM_BAD_ITEM;
56         }
57 @@ -130,6 +136,8 @@ int pam_set_item (pam_handle_t *pamh, in
58         break;
59  
60      case PAM_XAUTHDATA:
61 +       if (&pamh->xauth == item)
62 +           break;
63         if (pamh->xauth.namelen) {
64             _pam_overwrite(pamh->xauth.name);
65             free(pamh->xauth.name);
This page took 0.092227 seconds and 3 git commands to generate.