You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ranger.apache.org by "zhangqiang (JIRA)" <ji...@apache.org> on 2016/10/18 11:15:58 UTC

[jira] [Created] (RANGER-1187) In pamCredValidator.c, pam_end() is not called if authentication fails.

zhangqiang created RANGER-1187:
----------------------------------

             Summary: In pamCredValidator.c, pam_end() is not called if authentication fails.
                 Key: RANGER-1187
                 URL: https://issues.apache.org/jira/browse/RANGER-1187
             Project: Ranger
          Issue Type: Bug
          Components: Ranger
    Affects Versions: Ranger
            Reporter: zhangqiang
            Priority: Minor
             Fix For: Ranger


In main method of C file "\incubator-ranger\unixauthpam\src\main\c\pamCredValidator.c",
when authentication fails, pam_end() is not called before exit(1),
which result in PAM transaction is not closed.
The pam_end() function terminates a PAM transaction and destroys the
corresponding PAM context, releasing all resources allocated to it.

int main(int ac, char **av, char **ev)
{
	char username[64] ;
	char password[64] ;
	char line[512] ;

	int retval;
	pam_handle_t *pamh = NULL;

	fgets(line,512,stdin) ;
	sscanf(line, "LOGIN:%s %s",username,password) ;
	conv.appdata_ptr = (char *) password;

	retval = pam_start("ranger-remote", username, &conv, &pamh);
	if (retval != PAM_SUCCESS) {
		/* why expose this? */
		fprintf(stdout, "FAILED: [%s] does not exists.\n", username) ;
		exit(1);
	}

	retval = pam_authenticate(pamh, 0);
	if (retval != PAM_SUCCESS) {
		fprintf(stdout, "FAILED: Password did not match.\n") ;
		exit(1);
	}

	/* authorize */
	retval = pam_acct_mgmt(pamh, 0);
	if (retval != PAM_SUCCESS) {
		fprintf(stdout, "FAILED: [%s] is not authorized.\n", username) ;
		exit(1);
	}

	/* establish the requested credentials */
	if ((retval = pam_setcred(pamh, PAM_ESTABLISH_CRED)) != PAM_SUCCESS) {
			fprintf(stdout, "FAILED: Error setting credentials for [%s].\n", username) ;
    		exit(1);
	}

	/* not opening a session, as logout has not been implemented as a remote service */
	fprintf(stdout, "OK:\n") ;

	if (pamh) {
		pam_end(pamh, retval);
	}

	exit(0) ;
}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)