2003-08-13 05:53:07 +04:00
/*
Unix SMB / CIFS implementation .
Samba system utilities
Copyright ( C ) Andrew Tridgell 1992 - 1998
Copyright ( C ) Jeremy Allison 1998 - 2002
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
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2003-08-13 05:53:07 +04:00
( 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
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2003-08-13 05:53:07 +04:00
*/
# include "includes.h"
2004-11-02 01:48:25 +03:00
# include "system/network.h"
2004-11-02 06:13:06 +03:00
# include "system/filesys.h"
2003-08-13 05:53:07 +04:00
/*
The idea is that this file will eventually have wrappers around all
important system calls in samba . The aims are :
- to enable easier porting by putting OS dependent stuff in here
- to allow for hooks into other " pseudo-filesystems "
- to allow easier integration of things like the japanese extensions
- to support the philosophy of Samba to expose the features of
the OS within the SMB model . In general whatever file / printer / variable
expansions / etc make sense to the OS should be acceptable to Samba .
*/
/**************************************************************************
A wrapper for gethostbyname ( ) that tries avoids looking up hostnames
in the root domain , which can cause dial - on - demand links to come up for no
apparent reason .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-03-05 20:44:16 +03:00
_PUBLIC_ struct hostent * sys_gethostbyname ( const char * name )
2003-08-13 05:53:07 +04:00
{
# ifdef REDUCE_ROOT_DNS_LOOKUPS
char query [ 256 ] , hostname [ 256 ] ;
char * domain ;
/* Does this name have any dots in it? If so, make no change */
2006-04-27 20:05:05 +04:00
if ( strchr ( name , ' . ' ) )
2003-08-13 05:53:07 +04:00
return ( gethostbyname ( name ) ) ;
/* Get my hostname, which should have domain name
attached . If not , just do the gethostname on the
original string .
*/
gethostname ( hostname , sizeof ( hostname ) - 1 ) ;
hostname [ sizeof ( hostname ) - 1 ] = 0 ;
2006-04-27 20:05:05 +04:00
if ( ( domain = strchr ( hostname , ' . ' ) ) = = NULL )
2003-08-13 05:53:07 +04:00
return ( gethostbyname ( name ) ) ;
/* Attach domain name to query and do modified query.
If names too large , just do gethostname on the
original string .
*/
if ( ( strlen ( name ) + strlen ( domain ) ) > = sizeof ( query ) )
return ( gethostbyname ( name ) ) ;
slprintf ( query , sizeof ( query ) - 1 , " %s%s " , name , domain ) ;
return ( gethostbyname ( query ) ) ;
# else /* REDUCE_ROOT_DNS_LOOKUPS */
return ( gethostbyname ( name ) ) ;
# endif /* REDUCE_ROOT_DNS_LOOKUPS */
}
2007-10-13 22:24:37 +04:00
_PUBLIC_ struct in_addr sys_inet_makeaddr ( int net , int host )
2004-11-02 01:48:25 +03:00
{
struct in_addr in ;
2007-10-13 22:24:37 +04:00
struct in_addr in2 ;
2004-11-02 01:48:25 +03:00
in = inet_makeaddr ( net , host ) ;
2007-10-13 22:24:37 +04:00
in2 . s_addr = in . s_addr ;
2004-11-02 01:48:25 +03:00
return in2 ;
}
2004-11-02 02:37:12 +03:00
2009-02-24 07:46:11 +03:00
/**************************************************************************
Wrapper for fork . Ensures we clear our pid cache .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static pid_t mypid = ( pid_t ) - 1 ;
_PUBLIC_ pid_t sys_fork ( void )
{
pid_t forkret = fork ( ) ;
if ( forkret = = ( pid_t ) 0 ) {
/* Child - reset mypid so sys_getpid does a system call. */
mypid = ( pid_t ) - 1 ;
}
return forkret ;
}
/**************************************************************************
Wrapper for getpid . Ensures we only do a system call * once * .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
_PUBLIC_ pid_t sys_getpid ( void )
{
if ( mypid = = ( pid_t ) - 1 )
mypid = getpid ( ) ;
return mypid ;
}