Index: osl/unx/makefile.mk =================================================================== RCS file: /cvs/porting/sal/osl/unx/makefile.mk,v retrieving revision 1.27 retrieving revision 1.27.108.2 diff -u -r1.27 -r1.27.108.2 --- osl/unx/makefile.mk 8 Sep 2005 14:57:34 -0000 1.27 +++ osl/unx/makefile.mk 11 Jun 2006 00:28:27 -0000 1.27.108.2 @@ -121,7 +121,13 @@ APP1STDLIBS+=-lC .ENDIF -.IF "$(LINUX)" == "YES" +.IF "$(OS)" == "LINUX" +.IF "$(PAM)" == "NO" +CFLAGS+=-DNOPAM +.IF "$(NEW_SHADOW_API)" == "YES" +CFLAGS+=-DNEW_SHADOW_API +.ENDIF +.ENDIF .IF "$(PAM_LINK)" == "YES" CFLAGS+=-DPAM_LINK .ENDIF Index: osl/unx/security.c =================================================================== RCS file: /cvs/porting/sal/osl/unx/security.c,v retrieving revision 1.21 retrieving revision 1.19.12.3 diff -u -r1.21 -r1.19.12.3 --- osl/unx/security.c 20 Jun 2006 04:19:10 -0000 1.21 +++ osl/unx/security.c 16 Jul 2006 14:03:21 -0000 1.19.12.3 @@ -53,15 +53,17 @@ #include "osl/thread.h" #include "osl/file.h" -#ifdef SOLARIS +#if defined LINUX || defined SOLARIS #include #endif #include "secimpl.h" +#ifndef NOPAM #ifndef PAM_BINARY_MSG #define PAM_BINARY_MSG 6 #endif +#endif extern oslModule SAL_CALL osl_psz_loadModule(const sal_Char *pszModuleName, sal_Int32 nRtldMode); extern void* SAL_CALL osl_psz_getSymbol(oslModule hModule, const sal_Char* pszSymbolName); @@ -111,7 +113,7 @@ } -#ifdef LINUX +#if defined LINUX && !defined NOPAM /* * @@ -414,7 +416,7 @@ return success; } -#endif +#endif /* defined LINUX && !defined NOPAM */ oslSecurityError SAL_CALL osl_loginUser( rtl_uString *ustrUserName, rtl_uString *ustrPassword, @@ -494,7 +496,7 @@ if (found == NULL) { nError = osl_Security_E_UserUnknown; } else { -#if defined LINUX +#if defined LINUX && !defined NOPAM /* only root is able to read the /etc/shadow passwd, a normal user even can't read his own encrypted passwd */ if (osl_equalPasswords(p->m_pPasswd.pw_passwd, pszPasswd) || @@ -549,9 +551,11 @@ char buffer[1024]; struct spwd spwdStruct; buffer[0] = '\0'; - if (getspnam_r( - pszUserName, &spwdStruct, buffer, sizeof buffer) != - NULL) +#ifndef NEW_SHADOW_API + if (getspnam_r(pszUserName, &spwdStruct, buffer, sizeof buffer) != NULL) +#else + if (getspnam_r(pszUserName, &spwdStruct, buffer, sizeof buffer, NULL) == 0) +#endif { char salt[3]; char * cryptPasswd; @@ -561,10 +565,11 @@ if (strcmp(spwdStruct.sp_pwdp, cryptPasswd) == 0) { nError = osl_Security_E_None; } else if (getuid() == 0 && - (getspnam_r( - "root", &spwdStruct, buffer, - sizeof buffer) - != NULL)) +#ifndef NEW_SHADOW_API + (getspnam_r("root", &spwdStruct, buffer, sizeof buffer) != NULL)) +#else + (getspnam_r("root", &spwdStruct, buffer, sizeof buffer, NULL) == 0)) +#endif { /* if current process is running as root, allow to logon as any other user */