2005-07-11 09:19:50 +00:00
/*
Unix SMB / CIFS implementation .
provide access to getpwnam ( ) and related calls
Copyright ( C ) Andrew Tridgell 2005
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include "includes.h"
# include "scripting/ejs/smbcalls.h"
# include "lib/ejs/ejs.h"
# include "system/passwd.h"
/*
return a struct passwd as an object
*/
static struct MprVar mpr_passwd ( struct passwd * pwd )
{
struct MprVar ret ;
if ( pwd = = NULL ) {
return mprCreateUndefinedVar ( ) ;
}
2005-07-11 10:18:26 +00:00
ret = mprObject ( " passwd " ) ;
2005-07-11 09:19:50 +00:00
mprSetVar ( & ret , " pw_name " , mprString ( pwd - > pw_name ) ) ;
mprSetVar ( & ret , " pw_passwd " , mprString ( pwd - > pw_passwd ) ) ;
mprSetVar ( & ret , " pw_uid " , mprCreateIntegerVar ( pwd - > pw_uid ) ) ;
mprSetVar ( & ret , " pw_gid " , mprCreateIntegerVar ( pwd - > pw_gid ) ) ;
mprSetVar ( & ret , " pw_gecos " , mprString ( pwd - > pw_gecos ) ) ;
mprSetVar ( & ret , " pw_dir " , mprString ( pwd - > pw_dir ) ) ;
mprSetVar ( & ret , " pw_shell " , mprString ( pwd - > pw_shell ) ) ;
return ret ;
}
/*
return a struct passwd as an object
*/
static struct MprVar mpr_group ( struct group * grp )
{
struct MprVar ret ;
if ( grp = = NULL ) {
return mprCreateUndefinedVar ( ) ;
}
2005-07-11 10:18:26 +00:00
ret = mprObject ( " group " ) ;
2005-07-11 09:19:50 +00:00
mprSetVar ( & ret , " gr_name " , mprString ( grp - > gr_name ) ) ;
mprSetVar ( & ret , " gr_passwd " , mprString ( grp - > gr_passwd ) ) ;
mprSetVar ( & ret , " gr_gid " , mprCreateIntegerVar ( grp - > gr_gid ) ) ;
mprSetVar ( & ret , " gr_mem " , mprList ( " gr_mem " , ( const char * * ) grp - > gr_mem ) ) ;
return ret ;
}
/*
usage :
var pw = getpwnam ( " root " ) ;
returns an object containing struct passwd entries
*/
static int ejs_getpwnam ( MprVarHandle eid , int argc , struct MprVar * * argv )
{
/* validate arguments */
if ( argc ! = 1 | | argv [ 0 ] - > type ! = MPR_TYPE_STRING ) {
ejsSetErrorMsg ( eid , " getpwnam invalid arguments " ) ;
return - 1 ;
}
mpr_Return ( eid , mpr_passwd ( getpwnam ( mprToString ( argv [ 0 ] ) ) ) ) ;
return 0 ;
}
/*
usage :
var pw = getpwuid ( 0 ) ;
returns an object containing struct passwd entries
*/
static int ejs_getpwuid ( MprVarHandle eid , int argc , struct MprVar * * argv )
{
/* validate arguments */
2005-07-12 02:34:49 +00:00
if ( argc ! = 1 | | ! mprVarIsNumber ( argv [ 0 ] - > type ) ) {
2005-07-11 09:19:50 +00:00
ejsSetErrorMsg ( eid , " getpwuid invalid arguments " ) ;
return - 1 ;
}
mpr_Return ( eid , mpr_passwd ( getpwuid ( mprToInt ( argv [ 0 ] ) ) ) ) ;
return 0 ;
}
/*
usage :
var pw = getgrnam ( " users " ) ;
returns an object containing struct group entries
*/
static int ejs_getgrnam ( MprVarHandle eid , int argc , struct MprVar * * argv )
{
/* validate arguments */
if ( argc ! = 1 | | argv [ 0 ] - > type ! = MPR_TYPE_STRING ) {
ejsSetErrorMsg ( eid , " getgrnam invalid arguments " ) ;
return - 1 ;
}
mpr_Return ( eid , mpr_group ( getgrnam ( mprToString ( argv [ 0 ] ) ) ) ) ;
return 0 ;
}
/*
usage :
var pw = getgrgid ( 0 ) ;
returns an object containing struct group entries
*/
static int ejs_getgrgid ( MprVarHandle eid , int argc , struct MprVar * * argv )
{
/* validate arguments */
if ( argc ! = 1 | | argv [ 0 ] - > type ! = MPR_TYPE_STRING ) {
ejsSetErrorMsg ( eid , " getgrgid invalid arguments " ) ;
return - 1 ;
}
mpr_Return ( eid , mpr_group ( getgrgid ( mprToInt ( argv [ 0 ] ) ) ) ) ;
return 0 ;
}
/*
setup C functions that be called from ejs
*/
void smb_setup_ejs_nss ( void )
{
ejsDefineCFunction ( - 1 , " getpwnam " , ejs_getpwnam , NULL , MPR_VAR_SCRIPT_HANDLE ) ;
ejsDefineCFunction ( - 1 , " getpwuid " , ejs_getpwuid , NULL , MPR_VAR_SCRIPT_HANDLE ) ;
ejsDefineCFunction ( - 1 , " getgrnam " , ejs_getgrnam , NULL , MPR_VAR_SCRIPT_HANDLE ) ;
ejsDefineCFunction ( - 1 , " getgrgid " , ejs_getgrgid , NULL , MPR_VAR_SCRIPT_HANDLE ) ;
}