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.
30 #include <openssl/md5.h>
49 "Proxyuser: \"%s\" with %d no priv to auth clientUser: \"%s\".",
62 const int requireServerAuth = 1;
70 const int requireSIDs = 0;
86 if ( ( result =
ASSERT_PASS( ret,
"Invalid plugin context." ) ).ok() ) {
119 if ( ( result =
ASSERT_PASS( ret,
"Invalid plugin context." ) ).ok() ) {
124 memset( md5_buf, 0,
sizeof( md5_buf ) );
132 strncpy( md5_buf, ptr->request_result().c_str(),
CHALLENGE_LEN );
142 int need_password = 0;
159 if ( 0 != need_password ) {
161 HANDLE hStdin = GetStdHandle( STD_INPUT_HANDLE );
163 GetConsoleMode( hStdin, &
mode );
164 DWORD lastMode =
mode;
165 mode &= ~ENABLE_ECHO_INPUT;
166 BOOL
error = !SetConsoleMode( hStdin,
mode );
170 memset( &tty, 0,
sizeof( tty ) );
171 tcgetattr( STDIN_FILENO, &tty );
172 tcflag_t oldflag = tty.c_lflag;
173 tty.c_lflag &= ~ECHO;
174 int error = tcsetattr( STDIN_FILENO, TCSANOW, &tty );
178 printf(
"WARNING: Error %d disabling echo mode. Password will be displayed in plaintext.", errsv );
180 printf(
"Enter your current iRODS password:" );
181 std::string password =
"";
185 if ( !SetConsoleMode( hStdin, lastMode ) ) {
186 printf(
"Error reinstating echo mode." );
189 tty.c_lflag = oldflag;
190 if ( tcsetattr( STDIN_FILENO, TCSANOW, &tty ) ) {
191 printf(
"Error reinstating echo mode." );
199 MD5_Init( &context );
203 MD5_Final( (
unsigned char* )digest, &context );
210 if ( digest[ i ] ==
'\0' ) {
237 if ( auth_request ) {
239 free( auth_request );
241 return ERROR(
status,
"Call to rcAuthRequest failed." );
243 else if ( !auth_request ) {
247 free( auth_request );
248 return ERROR( 0,
"Challenge attribute is blank." );
255 free( auth_request );
273 if ( ( result =
ASSERT_PASS( ret,
"Invalid plugin context." ) ).ok() ) {
288 ptr->request_result(
buf );
320 if ( ( result =
ASSERT_PASS( ret,
"Invalid plugin context." ) ).ok() ) {
330 snprintf( response,
RESPONSE_LEN + 2,
"%s", ptr->digest().c_str() );
334 std::string user_name = ptr->user_name() +
"#" + ptr->zone_name();
336 snprintf( username,
MAX_NAME_LEN,
"%s", user_name.c_str() );
363 return PASSMSG(
"Invalid plugin context.", ret );
366 if (
NULL == _resp ) {
388 return ERROR(
status,
"Connecting to rcat host failed." );
390 memset( &authCheckInp, 0,
sizeof( authCheckInp ) );
411 rodsLog(
LOG_NOTICE,
"Warning, cannot authenticate remote server, no serverResponse field" );
412 if ( requireServerAuth ) {
420 rodsLog(
LOG_NOTICE,
"Warning, cannot authenticate remote server, serverResponse field is empty" );
421 if ( requireServerAuth ) {
428 memset( md5Buf, 0,
sizeof( md5Buf ) );
432 len = strlen( serverId );
434 rodsLog(
LOG_NOTICE,
"rsAuthResponse: Warning, cannot authenticate the remote server, no RemoteZoneSID defined in server_config.json",
status );
435 if ( requireServerAuth ) {
446 (
unsigned char* )md5Buf,
448 (
unsigned char* )digest );
451 if ( digest[i] ==
'\0' ) {
458 if ( *cp++ != digest[i] ) {
535 ret =
PASSMSG(
"Check proxy user priviledges failed.", ret );
539 "rsAuthResponse set proxy authFlag to %d, client authFlag to %d, user:%s proxy:%s client:%s",
561 if ( authCheckOut !=
NULL ) {
565 free( authCheckOut );
601 const std::string& _nm,
602 const std::string& _ctx ) :
617 const std::string& _inst_name,
618 const std::string& _context ) {
628 using namespace irods;
636 function<error(plugin_context&,rcComm_t*,const char*)>(
640 function<error(plugin_context&,rcComm_t*)>(
644 function<error(plugin_context&,rcComm_t*)>(
649 function<error(plugin_context&,const char*)>(
650 native_auth_agent_start ) );
654 native_auth_agent_request ) );
657 function<error(plugin_context&,authResponseInp_t*)>(
658 native_auth_agent_response ) );
661 function<error(plugin_context&,const char*,const char*,const char*)>(
662 native_auth_agent_verify ) );
void rodsLog(int level, const char *formatStr,...)
const std::string AUTH_ESTABLISH_CONTEXT("auth_establish_context")
const std::string AUTH_CLIENT_START("auth_client_start")
boost::shared_ptr< native_auth_object > native_auth_object_ptr
int getAndConnRcatHostNoLogin(rsComm_t *rsComm, int rcatType, char *rcatZoneHint, rodsServerHost_t **rodsServerHost)
auth(const std::string &_inst, const std::string &_ctx)
irods::error native_auth_establish_context(irods::plugin_context &_ctx)
const std::string AUTH_AGENT_AUTH_RESPONSE("auth_agent_auth_response")
const std::string AUTH_NATIVE_SCHEME("native")
void setSessionSignatureClientside(char *_sig)
#define PASSMSG(message_, prev_error_)
irods::auth * plugin_factory(const std::string &_inst_name, const std::string &_context)
void _rsSetAuthRequestGetChallenge(const char *_c)
const std::string AUTH_CLIENT_AUTH_REQUEST("auth_agent_client_request")
@ SYS_INVALID_INPUT_PARAM
@ REMOTE_SERVER_AUTH_NOT_PROVIDED
const std::string AUTH_AGENT_AUTH_REQUEST("auth_agent_auth_request")
#define ASSERT_ERROR(expr_, code_, format_,...)
virtual rsComm_t * comm()
@ REMOTE_SERVER_AUTH_EMPTY
irods::error native_auth_client_request(irods::plugin_context &_ctx, rcComm_t *_comm)
int getline(char *s, int n, FILE *f)
void obfMakeOneWayHash(int hashType, unsigned const char *inBuf, int inBufSize, unsigned char *outHash)
#define REMOTE_PRIV_USER_AUTH
int rcAuthCheck(rcComm_t *conn, authCheckInp_t *authCheckInp, authCheckOut_t **authCheckOut)
#define ASSERT_PASS(prev_error_, format_,...)
int getLocalZoneInfo(zoneInfo_t **outZoneInfo)
#define LOCAL_PRIV_USER_AUTH
irods::error native_auth_client_start(irods::plugin_context &_ctx, rcComm_t *_comm, const char *)
const std::string AUTH_AGENT_START("auth_agent_start")
#define ERROR(code_, message_)
native_auth_plugin(const std::string &_nm, const std::string &_ctx)
static irods::error check_proxy_user_privileges(rsComm_t *rsComm, int proxyUserPriv)
int get64RandomBytes(char *buf)
int rcAuthResponse(rcComm_t *conn, authResponseInp_t *authResponseInp)
irods::error native_auth_client_response(irods::plugin_context &_ctx, rcComm_t *_comm)
int rsAuthCheck(rsComm_t *rsComm, authCheckInp_t *authCheckInp, authCheckOut_t **authCheckOut)
int rcDisconnect(rcComm_t *conn)
#define HASH_TYPE_DEFAULT
error add_operation(const std::string &_op, std::function< error(plugin_context &)> _f)
virtual first_class_object_ptr fco()
void getZoneServerId(char *zoneName, char *zoneSID)
const std::string AUTH_AGENT_AUTH_VERIFY("auth_agent_auth_verify")
@ REMOTE_SERVER_AUTHENTICATION_FAILURE
char * _rsAuthRequestGetChallenge()
const std::string AUTH_CLIENT_AUTH_RESPONSE("auth_agent_client_response")
int parseUserName(const char *fullUserNameIn, char *userName, char *userZone)
@ REMOTE_SERVER_SID_NOT_DEFINED
int rcAuthRequest(rcComm_t *conn, authRequestOut_t **authRequestOut)