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
12 -#define TRY_SET(X, Y) \
14 - char *_TMP_ = _pam_strdup(Y); \
15 - if (_TMP_ == NULL && (Y) != NULL) \
16 - return PAM_BUF_ERR; \
19 +#define TRY_SET(X, Y) \
22 + char *_TMP_ = _pam_strdup(Y); \
23 + if (_TMP_ == NULL && (Y) != NULL) \
24 + return PAM_BUF_ERR; \
31 @@ -76,8 +78,10 @@ int pam_set_item (pam_handle_t *pamh, in
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);
42 retval = PAM_BAD_ITEM;
44 @@ -90,8 +94,10 @@ int pam_set_item (pam_handle_t *pamh, in
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);
55 retval = PAM_BAD_ITEM;
57 @@ -130,6 +136,8 @@ int pam_set_item (pam_handle_t *pamh, in
61 + if (&pamh->xauth == item)
63 if (pamh->xauth.namelen) {
64 _pam_overwrite(pamh->xauth.name);
65 free(pamh->xauth.name);