irods
4.2.8
About: iRODS (the integrated Rule Oriented Data System) is a distributed data-management system for creating data grids, digital libraries, persistent archives, and real-time data systems. Fossies Dox: irods-4.2.8.tar.gz ("unofficial" and yet experimental doxygen-generated source code documentation) 
|
Go to the documentation of this file.
26 #include "boost/lexical_cast.hpp"
38 #include <sys/types.h>
50 const char* _context ) {
57 if ( ( result =
ASSERT_PASS( ret,
"Invalid plugin context." ) ).ok() ) {
64 if ( ( result =
ASSERT_PASS( ret,
"Failed to parse the key-value pairs." ) ).ok() ) {
79 if ( password.empty() ) {
81 HANDLE hStdin = GetStdHandle( STD_INPUT_HANDLE );
83 GetConsoleMode( hStdin, &
mode );
84 DWORD lastMode =
mode;
85 mode &= ~ENABLE_ECHO_INPUT;
86 BOOL
error = !SetConsoleMode( hStdin,
mode );
90 tcgetattr( STDIN_FILENO, &tty );
91 tcflag_t oldflag = tty.c_lflag;
93 int error = tcsetattr( STDIN_FILENO, TCSANOW, &tty );
97 printf(
"WARNING: Error %d disabling echo mode. Password will be displayed in plaintext.", errsv );
99 printf(
"Enter your current PAM password:" );
100 std::string password =
"";
105 if ( !SetConsoleMode( hStdin, lastMode ) ) {
106 printf(
"Error reinstating echo mode." );
109 tty.c_lflag = oldflag;
110 if ( tcsetattr( STDIN_FILENO, TCSANOW, &tty ) ) {
111 printf(
"Error reinstating echo mode." );
122 ptr->context( ctx_str );
153 "invalid plugin context" );
169 std::string context = ptr->
context( );
170 if ( context.empty() ) {
173 "empty plugin context string" );
196 "context string > max name len" );
205 ctx_str.size() + 1 );
223 return ERROR( err,
"failed to enable ssl" );
241 return ERROR(
status,
"call to rcAuthRequest failed." );
247 ptr->request_result( req_out->
result_ );
259 #ifndef PAM_AUTH_CHECK_PROG
260 #define PAM_AUTH_CHECK_PROG "./irodsPamAuthCheck"
263 const std::string& _username,
264 const std::string& _password ) {
270 if ( pipe( p2cp ) < 0 ) {
283 if ( write( p2cp[1], _password.c_str(), _password.size() ) == -1 ) {
293 if ( dup2( p2cp[0], STDIN_FILENO ) == -1 ) {
295 irods::log(
ERROR( errsv,
"Error duplicating the file descriptor." ) );
301 printf(
"execl failed %d\n", i );
327 return ERROR(
status,
"getAndConnRcatHost failed." );
335 std::string context = ptr->
context( );
346 return ERROR(
status,
"could not establish SSL connection" );
354 strncpy( req_inp.
context_, context.c_str(), context.size() + 1 );
368 if ( !req_out ||
status < 0 ) {
369 return ERROR(
status,
"redirected rcAuthPluginRequest failed." );
374 ptr->request_result( req_out->
result_ );
405 if ( !ttl_str.empty() ) {
406 ttl = boost::lexical_cast<int>( ttl_str );
422 char* pw_ptr = &password_out[0];
427 ptr->request_result( password_out );
450 "invalid plugin context" );
498 const std::string& _nm,
499 const std::string& _ctx ) :
514 const std::string& _inst_name,
515 const std::string& _context ) {
525 using namespace irods;
533 function<error(plugin_context&,rcComm_t*,const char*)>(
537 function<error(plugin_context&,rcComm_t*)>(
541 function<error(plugin_context&,rcComm_t*)>(
546 function<error(plugin_context&,const char*)>(
547 pam_auth_agent_start ) );
551 pam_auth_agent_request ) );
554 function<error(plugin_context&,authResponseInp_t*)>(
555 pam_auth_agent_response ) );
558 function<error(plugin_context&,const char*,const char*,const char*)>(
559 pam_auth_agent_verify ) );
const std::string AUTH_TTL_KEY("a_ttl")
const std::string AUTH_ESTABLISH_CONTEXT("auth_establish_context")
const std::string AUTH_CLIENT_START("auth_client_start")
@ PAM_AUTH_PASSWORD_FAILED
#define PASS(prev_error_)
auth(const std::string &_inst, const std::string &_ctx)
virtual std::string context() const
irods::error pam_auth_client_request(irods::plugin_context &_ctx, rcComm_t *_comm)
boost::shared_ptr< pam_auth_object > pam_auth_object_ptr
int run_pam_auth_check(const std::string &_username, const std::string &_password)
const std::string AUTH_AGENT_AUTH_RESPONSE("auth_agent_auth_response")
std::string escaped_kvp_string(const kvp_map_t &_kvp)
const std::string AUTH_CLIENT_AUTH_REQUEST("auth_agent_client_request")
@ SYS_INVALID_INPUT_PARAM
#define PAM_AUTH_CHECK_PROG
const std::string AUTH_AGENT_AUTH_REQUEST("auth_agent_auth_request")
#define ASSERT_ERROR(expr_, code_, format_,...)
const std::string AUTH_PASSWORD_KEY("a_pw")
virtual rsComm_t * comm()
error parse_escaped_kvp_string(const std::string &_str, kvp_map_t &_kvp, const std::string &_association=KVP_DEF_ASSOCIATION, const std::string &_delimeter=KVP_DEF_DELIMITER, const std::string &_escape=KVP_DEF_ESCAPE)
int getline(char *s, int n, FILE *f)
irods::error pam_auth_establish_context(irods::plugin_context &_ctx)
const std::string CS_NEG_USE_SSL("CS_NEG_USE_SSL")
int get64RandomBytes(char *buf)
int obfSavePw(int promptOpt, int fileOpt, int printOpt, const char *pwArg)
int sslEnd(rcComm_t *rcComm)
const std::string AUTH_PAM_SCHEME("pam")
const std::string AUTH_USER_KEY("a_user")
#define ASSERT_PASS(prev_error_, format_,...)
const std::string AUTH_AGENT_START("auth_agent_start")
#define ERROR(code_, message_)
int getAndConnRcatHost(rsComm_t *rsComm, int rcatType, const char *rcatZoneHint, rodsServerHost_t **rodsServerHost)
irods::error pam_auth_client_response(irods::plugin_context &_ctx, rcComm_t *_comm)
int sslStart(rcComm_t *rcComm)
irods::error pam_auth_client_start(irods::plugin_context &_ctx, rcComm_t *_comm, const char *_context)
int rcDisconnect(rcComm_t *conn)
error add_operation(const std::string &_op, std::function< error(plugin_context &)> _f)
virtual first_class_object_ptr fco()
const std::string AUTH_AGENT_AUTH_VERIFY("auth_agent_auth_verify")
char auth_scheme_[(1024+64)]
int rcAuthPluginRequest(rcComm_t *server_comm_ptr, authPluginReqInp_t *incoming_struct_with_scheme, authPluginReqOut_t **response_from_agent)
std::map< std::string, std::string > kvp_map_t
int chlUpdateIrodsPamPassword(rsComm_t *rsComm, const char *userName, int timeToLive, const char *testTime, char **irodsPassword)
const std::string AUTH_CLIENT_AUTH_RESPONSE("auth_agent_client_response")
char negotiation_results[(1024+64)]
irods::auth * plugin_factory(const std::string &_inst_name, const std::string &_context)
pam_auth_plugin(const std::string &_nm, const std::string &_ctx)