Submitted By: DJ Lucas Date: 2004-12-24 Initial Package Version: 1.1rc4 Origin: openoffice-1.1.2-no_pam-1.patch (Tushar Teredesai) Description: OpenOffice requires PAM headers in /usr/include/security; these headers are not available in most of the LFS based systems. This patch removes the need for PAM headers by removing the functions that use PAM. Updated for OpenOffice-1.1.3 Upstream Status: Not Required $LastChangedBy: dj $ $Date: 2005-10-06 19:29:58 -0500 (Thu, 06 Oct 2005) $ --- OOo_1.1.3_src/sal/osl/unx/security.c.orig 2004-12-24 14:18:55.966151056 -0600 +++ OOo_1.1.3_src/sal/osl/unx/security.c 2004-12-24 14:20:47.761155632 -0600 @@ -133,8 +133,6 @@ * */ -#include - typedef struct { char* name; char* password; @@ -143,10 +141,10 @@ typedef struct { int (*pam_start)(const char *service_name, const char *user, const struct pam_conv *pam_conversation, - pam_handle_t **pamh); - int (*pam_end) (pam_handle_t *pamh, int pam_status); - int (*pam_authenticate) (pam_handle_t *pamh, int flags); - int (*pam_acct_mgmt) (pam_handle_t *pamh, int flags); + void **pamh); + int (*pam_end) (void *pamh, int pam_status); + int (*pam_authenticate) (void *pamh, int flags); + int (*pam_acct_mgmt) (void *pamh, int flags); } sal_PamModule; /* @@ -164,69 +162,7 @@ osl_PamConversation (int num_msg, const struct pam_message **msgm, struct pam_response **response, void *appdata_ptr) { - int i; - sal_Bool error; - sal_PamData *pam_data; - struct pam_response *p_reply; - - /* resource initialization */ - pam_data = (sal_PamData*) appdata_ptr; - p_reply = (struct pam_response *) calloc( num_msg, - sizeof(struct pam_response)); - if ( p_reply == NULL || pam_data == NULL ) - { - if ( p_reply != NULL ) - free ( p_reply ); - *response = NULL; - return PAM_CONV_ERR; - } - - /* pseudo dialog */ - error = sal_False; - for ( i = 0; i < num_msg ; i++ ) - { - switch ( msgm[ i ]->msg_style ) - { - case PAM_PROMPT_ECHO_OFF: - p_reply[ i ].resp_retcode = 0; - p_reply[ i ].resp = strdup( pam_data->password ); - break; - case PAM_PROMPT_ECHO_ON: - p_reply[ i ].resp_retcode = 0; - p_reply[ i ].resp = strdup( pam_data->name ); - break; - case PAM_ERROR_MSG: - case PAM_TEXT_INFO: - case PAM_BINARY_PROMPT: - case PAM_BINARY_MSG: - p_reply[ i ].resp_retcode = 0; - p_reply[ i ].resp = NULL; - break; - default: - error = sal_True; - break; - } - } - - /* free resources on error */ - if ( error ) - { - for ( i = 0; i < num_msg ; i++ ) - if ( p_reply[ i ].resp ) - { - memset ( p_reply[ i ].resp, 0, - strlen( p_reply[ i ].resp ) ); - free ( p_reply[ i ].resp ); - } - free ( p_reply ); - - *response = NULL; - return PAM_CONV_ERR; - } - - /* well done */ - *response = p_reply; - return PAM_SUCCESS; + return -1; } /* @@ -239,45 +175,6 @@ static sal_PamModule* osl_getPAM() { static sal_PamModule *pam_module = NULL; - static sal_Bool load_once = sal_False; - - if ( !load_once ) - { - /* get library-handle. cannot use osl-module, since - RTLD_GLOBAL is required for PAM-0.64 RH 5.2 - (but not for PAM-0.66 RH 6.0) */ - void *pam_hdl; - - pam_hdl = dlopen( "libpam.so.0", RTLD_GLOBAL | RTLD_LAZY ); - - if ( pam_hdl != NULL ) - pam_module = (sal_PamModule*)calloc( 1, sizeof(sal_PamModule) ); - - /* load functions */ - if ( pam_module != NULL ) - { - pam_module->pam_acct_mgmt = (int (*)(pam_handle_t *, int)) dlsym ( pam_hdl, "pam_acct_mgmt" ); - pam_module->pam_authenticate - = (int (*)(pam_handle_t *, int)) dlsym ( pam_hdl, "pam_authenticate" ); - pam_module->pam_end = (int (*)(pam_handle_t *, int)) dlsym ( pam_hdl, "pam_end" ); - pam_module->pam_start = (int (*)(const char *, const char *, const struct pam_conv *, pam_handle_t **)) dlsym ( pam_hdl, "pam_start" ); - - /* free resources, if not completely successful */ - if ( (pam_module->pam_start == NULL) - || (pam_module->pam_end == NULL) - || (pam_module->pam_authenticate == NULL) - || (pam_module->pam_acct_mgmt == NULL) ) - { - free( pam_module ); - pam_module = NULL; - dlclose( pam_hdl ); - } - } - - /* never try again */ - load_once = sal_True; - } - return pam_module; } @@ -289,35 +186,6 @@ osl_PamAuthentification( const sal_Char* name, const sal_Char* password ) { sal_Bool success = sal_False; - - sal_PamModule* pam_module; - - pam_module = osl_getPAM(); - if ( pam_module != NULL ) - { - pam_handle_t *pam_handle = NULL; - struct pam_conv pam_conversation; - sal_PamData pam_data; - - int return_value; - - pam_data.name = (char*) name; - pam_data.password = (char*) password; - - pam_conversation.conv = osl_PamConversation; - pam_conversation.appdata_ptr = (void*)(&pam_data); - - return_value = pam_module->pam_start( "su", name, - &pam_conversation, &pam_handle); - if (return_value == PAM_SUCCESS ) - return_value = pam_module->pam_authenticate(pam_handle, 0); - if (return_value == PAM_SUCCESS ) - return_value = pam_module->pam_acct_mgmt(pam_handle, 0); - pam_module->pam_end( pam_handle, return_value ); - - success = (sal_Bool)(return_value == PAM_SUCCESS); - } - return success; }