データ構造 | |
struct | _popen_list |
union | extattr_arg |
型定義 | |
typedef _popen_list | popen_list |
関数 | |
void * | sys_memalign (size_t align, size_t size) |
int | sys_usleep (long usecs) |
ssize_t | sys_read (int fd, void *buf, size_t count) |
ssize_t | sys_write (int fd, const void *buf, size_t count) |
ssize_t | sys_pread (int fd, void *buf, size_t count, SMB_OFF_T off) |
ssize_t | sys_pwrite (int fd, const void *buf, size_t count, SMB_OFF_T off) |
ssize_t | sys_send (int s, const void *msg, size_t len, int flags) |
ssize_t | sys_sendto (int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) |
ssize_t | sys_recv (int fd, void *buf, size_t count, int flags) |
ssize_t | sys_recvfrom (int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) |
int | sys_fcntl_ptr (int fd, int cmd, void *arg) |
int | sys_fcntl_long (int fd, int cmd, long arg) |
int | sys_stat (const char *fname, SMB_STRUCT_STAT *sbuf) |
int | sys_fstat (int fd, SMB_STRUCT_STAT *sbuf) |
int | sys_lstat (const char *fname, SMB_STRUCT_STAT *sbuf) |
int | sys_ftruncate (int fd, SMB_OFF_T offset) |
SMB_OFF_T | sys_lseek (int fd, SMB_OFF_T offset, int whence) |
int | sys_fseek (FILE *fp, SMB_OFF_T offset, int whence) |
SMB_OFF_T | sys_ftell (FILE *fp) |
int | sys_creat (const char *path, mode_t mode) |
int | sys_open (const char *path, int oflag, mode_t mode) |
FILE * | sys_fopen (const char *path, const char *type) |
void | kernel_flock (int fd, uint32 share_mode) |
SMB_STRUCT_DIR * | sys_opendir (const char *name) |
SMB_STRUCT_DIRENT * | sys_readdir (SMB_STRUCT_DIR *dirp) |
void | sys_seekdir (SMB_STRUCT_DIR *dirp, long offset) |
long | sys_telldir (SMB_STRUCT_DIR *dirp) |
void | sys_rewinddir (SMB_STRUCT_DIR *dirp) |
int | sys_closedir (SMB_STRUCT_DIR *dirp) |
int | sys_mknod (const char *path, mode_t mode, SMB_DEV_T dev) |
char * | sys_realpath (const char *path, char *resolved_path) |
int | sys_waitpid (pid_t pid, int *status, int options) |
char * | sys_getwd (char *s) |
int | sys_symlink (const char *oldpath, const char *newpath) |
int | sys_readlink (const char *path, char *buf, size_t bufsiz) |
int | sys_link (const char *oldpath, const char *newpath) |
int | sys_chown (const char *fname, uid_t uid, gid_t gid) |
int | sys_chroot (const char *dname) |
hostent * | sys_gethostbyname (const char *name) |
static BOOL | set_process_capability (enum smbd_capability capability, BOOL enable) |
void | set_effective_capability (enum smbd_capability capability) |
void | drop_effective_capability (enum smbd_capability capability) |
long | sys_random (void) |
void | sys_srandom (unsigned int seed) |
int | groups_max (void) |
int | sys_getgroups (int setlen, gid_t *gidset) |
int | sys_setgroups (int setlen, gid_t *gidset) |
void | sys_setpwent (void) |
passwd * | sys_getpwent (void) |
void | sys_endpwent (void) |
passwd * | sys_getpwnam (const char *name) |
passwd * | sys_getpwuid (uid_t uid) |
void | faked_create_user (const char *name) |
group * | sys_getgrnam (const char *name) |
group * | sys_getgrgid (gid_t gid) |
int | wsys_stat (const smb_ucs2_t *wfname, SMB_STRUCT_STAT *sbuf) |
int | wsys_lstat (const smb_ucs2_t *wfname, SMB_STRUCT_STAT *sbuf) |
int | wsys_creat (const smb_ucs2_t *wfname, mode_t mode) |
int | wsys_open (const smb_ucs2_t *wfname, int oflag, mode_t mode) |
FILE * | wsys_fopen (const smb_ucs2_t *wfname, const char *type) |
SMB_STRUCT_DIR * | wsys_opendir (const smb_ucs2_t *wfname) |
SMB_STRUCT_WDIRENT * | wsys_readdir (SMB_STRUCT_DIR *dirp) |
smb_ucs2_t * | wsys_getwd (smb_ucs2_t *s) |
int | wsys_chown (const smb_ucs2_t *wfname, uid_t uid, gid_t gid) |
int | wsys_chroot (const smb_ucs2_t *wfname) |
SMB_STRUCT_WPASSWD * | wsys_getpwnam (const smb_ucs2_t *wname) |
SMB_STRUCT_WPASSWD * | wsys_getpwuid (uid_t uid) |
static char ** | extract_args (const char *command) |
pid_t | sys_fork (void) |
pid_t | sys_getpid (void) |
int | sys_popen (const char *command) |
int | sys_pclose (int fd) |
void * | sys_dlopen (const char *name, int flags) |
void * | sys_dlsym (void *handle, const char *symbol) |
int | sys_dlclose (void *handle) |
const char * | sys_dlerror (void) |
int | sys_dup2 (int oldfd, int newfd) |
void | sys_adminlog (int priority, const char *format_str,...) |
static int | solaris_write_xattr (int attrfd, const char *value, size_t size) |
static ssize_t | solaris_read_xattr (int attrfd, void *value, size_t size) |
static ssize_t | solaris_list_xattr (int attrdirfd, char *list, size_t size) |
static int | solaris_unlinkat (int attrdirfd, const char *name) |
static int | solaris_attropen (const char *path, const char *attrpath, int oflag, mode_t mode) |
static int | solaris_openat (int fildes, const char *path, int oflag, mode_t mode) |
ssize_t | sys_getxattr (const char *path, const char *name, void *value, size_t size) |
ssize_t | sys_lgetxattr (const char *path, const char *name, void *value, size_t size) |
ssize_t | sys_fgetxattr (int filedes, const char *name, void *value, size_t size) |
static ssize_t | bsd_attr_list (int type, extattr_arg arg, char *list, size_t size) |
static ssize_t | irix_attr_list (const char *path, int filedes, char *list, size_t size, int flags) |
ssize_t | sys_listxattr (const char *path, char *list, size_t size) |
ssize_t | sys_llistxattr (const char *path, char *list, size_t size) |
ssize_t | sys_flistxattr (int filedes, char *list, size_t size) |
int | sys_removexattr (const char *path, const char *name) |
int | sys_lremovexattr (const char *path, const char *name) |
int | sys_fremovexattr (int filedes, const char *name) |
int | sys_setxattr (const char *path, const char *name, const void *value, size_t size, int flags) |
int | sys_lsetxattr (const char *path, const char *name, const void *value, size_t size, int flags) |
int | sys_fsetxattr (int filedes, const char *name, const void *value, size_t size, int flags) |
uint32 | unix_dev_major (SMB_DEV_T dev) |
uint32 | unix_dev_minor (SMB_DEV_T dev) |
int | sys_aio_read (SMB_STRUCT_AIOCB *aiocb) |
int | sys_aio_write (SMB_STRUCT_AIOCB *aiocb) |
ssize_t | sys_aio_return (SMB_STRUCT_AIOCB *aiocb) |
int | sys_aio_cancel (int fd, SMB_STRUCT_AIOCB *aiocb) |
int | sys_aio_error (const SMB_STRUCT_AIOCB *aiocb) |
int | sys_aio_fsync (int op, SMB_STRUCT_AIOCB *aiocb) |
int | sys_aio_suspend (const SMB_STRUCT_AIOCB *const cblist[], int n, const struct timespec *timeout) |
int | sys_getpeereid (int s, uid_t *uid) |
変数 | |
static struct passwd * | fake_pwd |
static int | num_fake_pwd |
static pid_t | mypid = (pid_t)-1 |
static popen_list * | popen_chain |
struct { | |
int space | |
const char * name | |
size_t len | |
} | extattr [] |
static char | attr_buffer [ATTR_MAX_VALUELEN] |
typedef struct _popen_list popen_list |
void* sys_memalign | ( | size_t | align, | |
size_t | size | |||
) |
参照元 memalign_array().
00052 { 00053 #if defined(HAVE_POSIX_MEMALIGN) 00054 void *p = NULL; 00055 int ret = posix_memalign( &p, align, size ); 00056 if ( ret == 0 ) 00057 return p; 00058 00059 return NULL; 00060 #elif defined(HAVE_MEMALIGN) 00061 return memalign( align, size ); 00062 #else 00063 /* On *BSD systems memaligns doesn't exist, but memory will 00064 * be aligned on allocations of > pagesize. */ 00065 #if defined(SYSCONF_SC_PAGESIZE) 00066 size_t pagesize = (size_t)sysconf(_SC_PAGESIZE); 00067 #elif defined(HAVE_GETPAGESIZE) 00068 size_t pagesize = (size_t)getpagesize(); 00069 #else 00070 size_t pagesize = (size_t)-1; 00071 #endif 00072 if (pagesize == (size_t)-1) { 00073 DEBUG(0,("memalign functionalaity not available on this platform!\n")); 00074 return NULL; 00075 } 00076 if (size < pagesize) { 00077 size = pagesize; 00078 } 00079 return SMB_MALLOC(size); 00080 #endif 00081 }
int sys_usleep | ( | long | usecs | ) |
参照先 errno.
参照元 _spoolss_open_printer_ex()・startsmbfilepwent()・status_profile_rates()・watch_service_state().
00088 { 00089 #ifndef HAVE_USLEEP 00090 struct timeval tval; 00091 #endif 00092 00093 /* 00094 * We need this braindamage as the glibc usleep 00095 * is not SPEC1170 complient... grumble... JRA. 00096 */ 00097 00098 if(usecs < 0 || usecs > 1000000) { 00099 errno = EINVAL; 00100 return -1; 00101 } 00102 00103 #if HAVE_USLEEP 00104 usleep(usecs); 00105 return 0; 00106 #else /* HAVE_USLEEP */ 00107 /* 00108 * Fake it with select... 00109 */ 00110 tval.tv_sec = 0; 00111 tval.tv_usec = usecs/1000; 00112 select(0,NULL,NULL,NULL,&tval); 00113 return 0; 00114 #endif /* HAVE_USLEEP */ 00115 }
ssize_t sys_read | ( | int | fd, | |
void * | buf, | |||
size_t | count | |||
) |
参照先 errno.
参照元 read_data()・read_data_until()・read_socket_with_timeout()・rw_callback()・transfer_file()・vfswrap_read().
00122 { 00123 ssize_t ret; 00124 00125 do { 00126 ret = read(fd, buf, count); 00127 } while (ret == -1 && errno == EINTR); 00128 return ret; 00129 }
ssize_t sys_write | ( | int | fd, | |
const void * | buf, | |||
size_t | count | |||
) |
参照先 errno.
参照元 expect()・rw_callback()・transfer_file()・vfswrap_write()・write_data().
00136 { 00137 ssize_t ret; 00138 00139 do { 00140 ret = write(fd, buf, count); 00141 } while (ret == -1 && errno == EINTR); 00142 return ret; 00143 }
ssize_t sys_pread | ( | int | fd, | |
void * | buf, | |||
size_t | count, | |||
SMB_OFF_T | off | |||
) |
参照先 errno.
参照元 prime_cache()・vfswrap_pread().
00151 { 00152 ssize_t ret; 00153 00154 do { 00155 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_PREAD64) 00156 ret = pread64(fd, buf, count, off); 00157 #else 00158 ret = pread(fd, buf, count, off); 00159 #endif 00160 } while (ret == -1 && errno == EINTR); 00161 return ret; 00162 }
ssize_t sys_pwrite | ( | int | fd, | |
const void * | buf, | |||
size_t | count, | |||
SMB_OFF_T | off | |||
) |
参照先 errno.
参照元 vfswrap_pwrite()・write_data_at_offset().
00171 { 00172 ssize_t ret; 00173 00174 do { 00175 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_PWRITE64) 00176 ret = pwrite64(fd, buf, count, off); 00177 #else 00178 ret = pwrite(fd, buf, count, off); 00179 #endif 00180 } while (ret == -1 && errno == EINTR); 00181 return ret; 00182 }
ssize_t sys_send | ( | int | s, | |
const void * | msg, | |||
size_t | len, | |||
int | flags | |||
) |
ssize_t sys_sendto | ( | int | s, | |
const void * | msg, | |||
size_t | len, | |||
int | flags, | |||
const struct sockaddr * | to, | |||
socklen_t | tolen | |||
) |
ssize_t sys_recv | ( | int | fd, | |
void * | buf, | |||
size_t | count, | |||
int | flags | |||
) |
ssize_t sys_recvfrom | ( | int | s, | |
void * | buf, | |||
size_t | len, | |||
int | flags, | |||
struct sockaddr * | from, | |||
socklen_t * | fromlen | |||
) |
int sys_fcntl_ptr | ( | int | fd, | |
int | cmd, | |||
void * | arg | |||
) |
参照先 errno.
参照元 fcntl_getlock()・fcntl_lock()・irix_oplock_receive_message().
00246 { 00247 int ret; 00248 00249 do { 00250 ret = fcntl(fd, cmd, arg); 00251 } while (ret == -1 && errno == EINTR); 00252 return ret; 00253 }
int sys_fcntl_long | ( | int | fd, | |
int | cmd, | |||
long | arg | |||
) |
参照先 errno.
参照元 irix_oplocks_available()・irix_release_kernel_oplock()・irix_set_kernel_oplock()・set_blocking().
00260 { 00261 int ret; 00262 00263 do { 00264 ret = fcntl(fd, cmd, arg); 00265 } while (ret == -1 && errno == EINTR); 00266 return ret; 00267 }
int sys_stat | ( | const char * | fname, | |
SMB_STRUCT_STAT * | sbuf | |||
) |
参照元 cgi_download()・cmd_newer()・directory_exist()・disk_quotas()・file_exist()・file_modtime()・get_file_size()・get_ticket_cache()・load_usershare_service()・net_usershare_add()・parse_usershare_file()・startsmbfilepwent()・sys_path_to_bdev()・vfswrap_stat()・writetarheader()・wsys_stat().
00274 { 00275 int ret; 00276 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_STAT64) 00277 ret = stat64(fname, sbuf); 00278 #else 00279 ret = stat(fname, sbuf); 00280 #endif 00281 /* we always want directories to appear zero size */ 00282 if (ret == 0 && S_ISDIR(sbuf->st_mode)) sbuf->st_size = 0; 00283 return ret; 00284 }
int sys_fstat | ( | int | fd, | |
SMB_STRUCT_STAT * | sbuf | |||
) |
参照元 check_log_size()・check_magic()・fd_load()・info_fn()・net_usershare_add()・print_job_end()・process_usershare_file()・read_block()・regf_hbin_allocate()・startsmbfilepwent()・vfswrap_fstat()・write_block()・writetarheader().
00291 { 00292 int ret; 00293 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_FSTAT64) 00294 ret = fstat64(fd, sbuf); 00295 #else 00296 ret = fstat(fd, sbuf); 00297 #endif 00298 /* we always want directories to appear zero size */ 00299 if (ret == 0 && S_ISDIR(sbuf->st_mode)) sbuf->st_size = 0; 00300 return ret; 00301 }
int sys_lstat | ( | const char * | fname, | |
SMB_STRUCT_STAT * | sbuf | |||
) |
参照元 atalk_build_paths()・copy_reg()・count_num_usershares()・get_share_list()・net_usershare_add()・process_usershare_file()・usershare_exists()・vfswrap_lstat()・wsys_lstat().
00308 { 00309 int ret; 00310 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_LSTAT64) 00311 ret = lstat64(fname, sbuf); 00312 #else 00313 ret = lstat(fname, sbuf); 00314 #endif 00315 /* we always want directories to appear zero size */ 00316 if (ret == 0 && S_ISDIR(sbuf->st_mode)) sbuf->st_size = 0; 00317 return ret; 00318 }
int sys_ftruncate | ( | int | fd, | |
SMB_OFF_T | offset | |||
) |
参照元 print_fsp_end()・strict_allocate_ftruncate()・vfswrap_ftruncate().
00325 { 00326 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_FTRUNCATE64) 00327 return ftruncate64(fd, offset); 00328 #else 00329 return ftruncate(fd, offset); 00330 #endif 00331 }
SMB_OFF_T sys_lseek | ( | int | fd, | |
SMB_OFF_T | offset, | |||
int | whence | |||
) |
参照元 do_get()・smbrun_internal()・vfswrap_lseek()・write_data_at_offset()・x_tseek().
00338 { 00339 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_LSEEK64) 00340 return lseek64(fd, offset, whence); 00341 #else 00342 return lseek(fd, offset, whence); 00343 #endif 00344 }
int sys_fseek | ( | FILE * | fp, | |
SMB_OFF_T | offset, | |||
int | whence | |||
) |
00351 { 00352 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(LARGE_SMB_OFF_T) && defined(HAVE_FSEEK64) 00353 return fseek64(fp, offset, whence); 00354 #elif defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(LARGE_SMB_OFF_T) && defined(HAVE_FSEEKO64) 00355 return fseeko64(fp, offset, whence); 00356 #else 00357 return fseek(fp, offset, whence); 00358 #endif 00359 }
SMB_OFF_T sys_ftell | ( | FILE * | fp | ) |
00366 { 00367 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(LARGE_SMB_OFF_T) && defined(HAVE_FTELL64) 00368 return (SMB_OFF_T)ftell64(fp); 00369 #elif defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(LARGE_SMB_OFF_T) && defined(HAVE_FTELLO64) 00370 return (SMB_OFF_T)ftello64(fp); 00371 #else 00372 return (SMB_OFF_T)ftell(fp); 00373 #endif 00374 }
int sys_creat | ( | const char * | path, | |
mode_t | mode | |||
) |
参照先 sys_open().
参照元 writetarheader()・wsys_creat().
00381 { 00382 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_CREAT64) 00383 return creat64(path, mode); 00384 #else 00385 /* 00386 * If creat64 isn't defined then ensure we call a potential open64. 00387 * JRA. 00388 */ 00389 return sys_open(path, O_WRONLY | O_CREAT | O_TRUNC, mode); 00390 #endif 00391 }
int sys_open | ( | const char * | path, | |
int | oflag, | |||
mode_t | mode | |||
) |
参照元 become_daemon()・close_low_fds()・copy_reg()・disk_quotas_vxfs()・do_filehash()・do_get()・do_reseed()・dochild()・findpty()・get_password_file()・gpo_copy_file()・info_fn()・irix_oplocks_available()・pidfile_create()・pidfile_pid()・process_usershare_file()・startsmbfilepwent()・sys_creat()・vfswrap_open()・web_open()・writetarheader()・wsys_open()・x_fopen().
00398 { 00399 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OPEN64) 00400 return open64(path, oflag, mode); 00401 #else 00402 return open(path, oflag, mode); 00403 #endif 00404 }
FILE* sys_fopen | ( | const char * | path, | |
const char * | type | |||
) |
参照元 read_credentials_file()・save_reload()・startsmbfilepwent()・wsys_fopen().
00411 { 00412 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_FOPEN64) 00413 return fopen64(path, type); 00414 #else 00415 return fopen(path, type); 00416 #endif 00417 }
void kernel_flock | ( | int | fd, | |
uint32 | share_mode | |||
) |
参照元 vfs_gpfs_kernel_flock()・vfswrap_kernel_flock().
00425 { 00426 #if HAVE_KERNEL_SHARE_MODES 00427 int kernel_mode = 0; 00428 if (share_mode == FILE_SHARE_WRITE) { 00429 kernel_mode = LOCK_MAND|LOCK_WRITE; 00430 } else if (share_mode == FILE_SHARE_READ) { 00431 kernel_mode = LOCK_MAND|LOCK_READ; 00432 } else if (share_mode == FILE_SHARE_NONE) { 00433 kernel_mode = LOCK_MAND; 00434 } 00435 if (kernel_mode) { 00436 flock(fd, kernel_mode); 00437 } 00438 #endif 00439 ; 00440 }
SMB_STRUCT_DIR* sys_opendir | ( | const char * | name | ) |
参照先 opendir()・opendir64().
参照元 atalk_rrmdir()・count_num_usershares()・file_find()・findpty()・get_share_list()・get_ticket_cache()・net_usershare()・parse_usershare_file()・vfswrap_opendir().
00449 { 00450 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OPENDIR64) 00451 return opendir64(name); 00452 #else 00453 return opendir(name); 00454 #endif 00455 }
SMB_STRUCT_DIRENT* sys_readdir | ( | SMB_STRUCT_DIR * | dirp | ) |
参照先 readdir()・readdir64().
参照元 atalk_rrmdir()・count_num_usershares()・get_share_list()・get_ticket_cache()・readdirname()・vfswrap_readdir()・wsys_readdir().
00462 { 00463 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_READDIR64) 00464 return readdir64(dirp); 00465 #else 00466 return readdir(dirp); 00467 #endif 00468 }
void sys_seekdir | ( | SMB_STRUCT_DIR * | dirp, | |
long | offset | |||
) |
参照先 seekdir()・seekdir64().
参照元 vfswrap_seekdir().
00475 { 00476 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_SEEKDIR64) 00477 seekdir64(dirp, offset); 00478 #else 00479 seekdir(dirp, offset); 00480 #endif 00481 }
long sys_telldir | ( | SMB_STRUCT_DIR * | dirp | ) |
参照先 telldir()・telldir64().
参照元 vfswrap_telldir().
00488 { 00489 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_TELLDIR64) 00490 return (long)telldir64(dirp); 00491 #else 00492 return (long)telldir(dirp); 00493 #endif 00494 }
void sys_rewinddir | ( | SMB_STRUCT_DIR * | dirp | ) |
参照先 rewinddir().
参照元 vfswrap_rewinddir().
00501 { 00502 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_REWINDDIR64) 00503 rewinddir64(dirp); 00504 #else 00505 rewinddir(dirp); 00506 #endif 00507 }
int sys_closedir | ( | SMB_STRUCT_DIR * | dirp | ) |
参照先 closedir().
参照元 atalk_rrmdir()・count_num_usershares()・file_find()・findpty()・get_share_list()・get_ticket_cache()・net_usershare()・parse_usershare_file()・vfswrap_closedir().
00514 { 00515 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_CLOSEDIR64) 00516 return closedir64(dirp); 00517 #else 00518 return closedir(dirp); 00519 #endif 00520 }
int sys_mknod | ( | const char * | path, | |
mode_t | mode, | |||
SMB_DEV_T | dev | |||
) |
参照先 errno.
参照元 vfswrap_mknod().
00527 { 00528 #if defined(HAVE_MKNOD) || defined(HAVE_MKNOD64) 00529 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_MKNOD64) && defined(HAVE_DEV64_T) 00530 return mknod64(path, mode, dev); 00531 #else 00532 return mknod(path, mode, dev); 00533 #endif 00534 #else 00535 /* No mknod system call. */ 00536 errno = ENOSYS; 00537 return -1; 00538 #endif 00539 }
char* sys_realpath | ( | const char * | path, | |
char * | resolved_path | |||
) |
参照先 errno.
参照元 vfswrap_realpath().
00546 { 00547 #if defined(HAVE_REALPATH) 00548 return realpath(path, resolved_path); 00549 #else 00550 /* As realpath is not a system call we can't return ENOSYS. */ 00551 errno = EINVAL; 00552 return NULL; 00553 #endif 00554 }
int sys_waitpid | ( | pid_t | pid, | |
int * | status, | |||
int | options | |||
) |
参照元 chat_with_program()・main()・open_sockets_smbd()・sig_cld()・smbrun_internal()・smbrunsecret().
00561 { 00562 #ifdef HAVE_WAITPID 00563 return waitpid(pid,status,options); 00564 #else /* HAVE_WAITPID */ 00565 return wait4(pid, status, options, NULL); 00566 #endif /* HAVE_WAITPID */ 00567 }
char* sys_getwd | ( | char * | s | ) |
参照元 cmd_lcd()・generic_job_submit()・vfswrap_getwd()・wsys_getwd().
00574 { 00575 char *wd; 00576 #ifdef HAVE_GETCWD 00577 wd = (char *)getcwd(s, sizeof (pstring)); 00578 #else 00579 wd = (char *)getwd(s); 00580 #endif 00581 return wd; 00582 }
int sys_symlink | ( | const char * | oldpath, | |
const char * | newpath | |||
) |
参照先 errno.
参照元 vfswrap_symlink().
00589 { 00590 #ifndef HAVE_SYMLINK 00591 errno = ENOSYS; 00592 return -1; 00593 #else 00594 return symlink(oldpath, newpath); 00595 #endif 00596 }
int sys_readlink | ( | const char * | path, | |
char * | buf, | |||
size_t | bufsiz | |||
) |
int sys_link | ( | const char * | oldpath, | |
const char * | newpath | |||
) |
参照先 errno.
参照元 vfswrap_link().
00617 { 00618 #ifndef HAVE_LINK 00619 errno = ENOSYS; 00620 return -1; 00621 #else 00622 return link(oldpath, newpath); 00623 #endif 00624 }
int sys_chown | ( | const char * | fname, | |
uid_t | uid, | |||
gid_t | gid | |||
) |
参照先 errno.
参照元 dump_core_setup()・vfswrap_chown().
00631 { 00632 #ifndef HAVE_CHOWN 00633 static int done; 00634 if (!done) { 00635 DEBUG(1,("WARNING: no chown!\n")); 00636 done=1; 00637 } 00638 errno = ENOSYS; 00639 return -1; 00640 #else 00641 return(chown(fname,uid,gid)); 00642 #endif 00643 }
int sys_chroot | ( | const char * | dname | ) |
struct hostent* sys_gethostbyname | ( | const char * | name | ) |
参照先 strchr_m().
参照元 get_mydnsfullname()・interpret_addr()・is_myname_or_ipaddr()・matchname()・name_to_fqdn()・resolve_hosts().
00670 { 00671 #ifdef REDUCE_ROOT_DNS_LOOKUPS 00672 char query[256], hostname[256]; 00673 char *domain; 00674 00675 /* Does this name have any dots in it? If so, make no change */ 00676 00677 if (strchr_m(name, '.')) 00678 return(gethostbyname(name)); 00679 00680 /* Get my hostname, which should have domain name 00681 attached. If not, just do the gethostname on the 00682 original string. 00683 */ 00684 00685 gethostname(hostname, sizeof(hostname) - 1); 00686 hostname[sizeof(hostname) - 1] = 0; 00687 if ((domain = strchr_m(hostname, '.')) == NULL) 00688 return(gethostbyname(name)); 00689 00690 /* Attach domain name to query and do modified query. 00691 If names too large, just do gethostname on the 00692 original string. 00693 */ 00694 00695 if((strlen(name) + strlen(domain)) >= sizeof(query)) 00696 return(gethostbyname(name)); 00697 00698 slprintf(query, sizeof(query)-1, "%s%s", name, domain); 00699 return(gethostbyname(query)); 00700 #else /* REDUCE_ROOT_DNS_LOOKUPS */ 00701 return(gethostbyname(name)); 00702 #endif /* REDUCE_ROOT_DNS_LOOKUPS */ 00703 }
static BOOL set_process_capability | ( | enum smbd_capability | capability, | |
BOOL | enable | |||
) | [static] |
参照先 DMAPI_ACCESS_CAPABILITY・errno・KERNEL_OPLOCK_CAPABILITY・LEASE_CAPABILITY・strerror().
参照元 drop_effective_capability()・set_effective_capability().
00737 { 00738 cap_value_t cap_vals[2] = {0}; 00739 int num_cap_vals = 0; 00740 00741 cap_t cap; 00742 00743 #if defined(HAVE_PRCTL) && defined(PR_GET_KEEPCAPS) && defined(PR_SET_KEEPCAPS) 00744 /* On Linux, make sure that any capabilities we grab are sticky 00745 * across UID changes. We expect that this would allow us to keep both 00746 * the effective and permitted capability sets, but as of circa 2.6.16, 00747 * only the permitted set is kept. It is a bug (which we work around) 00748 * that the effective set is lost, but we still require the effective 00749 * set to be kept. 00750 */ 00751 if (!prctl(PR_GET_KEEPCAPS)) { 00752 prctl(PR_SET_KEEPCAPS, 1); 00753 } 00754 #endif 00755 00756 cap = cap_get_proc(); 00757 if (cap == NULL) { 00758 DEBUG(0,("set_process_capability: cap_get_proc failed: %s\n", 00759 strerror(errno))); 00760 return False; 00761 } 00762 00763 switch (capability) { 00764 case KERNEL_OPLOCK_CAPABILITY: 00765 #ifdef CAP_NETWORK_MGT 00766 /* IRIX has CAP_NETWORK_MGT for oplocks. */ 00767 cap_vals[num_cap_vals++] = CAP_NETWORK_MGT; 00768 #endif 00769 break; 00770 case DMAPI_ACCESS_CAPABILITY: 00771 #ifdef CAP_DEVICE_MGT 00772 /* IRIX has CAP_DEVICE_MGT for DMAPI access. */ 00773 cap_vals[num_cap_vals++] = CAP_DEVICE_MGT; 00774 #elif CAP_MKNOD 00775 /* Linux has CAP_MKNOD for DMAPI access. */ 00776 cap_vals[num_cap_vals++] = CAP_MKNOD; 00777 #endif 00778 break; 00779 case LEASE_CAPABILITY: 00780 #ifdef CAP_LEASE 00781 cap_vals[num_cap_vals++] = CAP_LEASE; 00782 #endif 00783 break; 00784 } 00785 00786 SMB_ASSERT(num_cap_vals <= ARRAY_SIZE(cap_vals)); 00787 00788 if (num_cap_vals == 0) { 00789 cap_free(cap); 00790 return True; 00791 } 00792 00793 cap_set_flag(cap, CAP_EFFECTIVE, num_cap_vals, cap_vals, 00794 enable ? CAP_SET : CAP_CLEAR); 00795 00796 /* We never want to pass capabilities down to our children, so make 00797 * sure they are not inherited. 00798 */ 00799 cap_set_flag(cap, CAP_INHERITABLE, num_cap_vals, cap_vals, CAP_CLEAR); 00800 00801 if (cap_set_proc(cap) == -1) { 00802 DEBUG(0, ("set_process_capability: cap_set_proc failed: %s\n", 00803 strerror(errno))); 00804 cap_free(cap); 00805 return False; 00806 } 00807 00808 cap_free(cap); 00809 return True; 00810 }
void set_effective_capability | ( | enum smbd_capability | capability | ) |
参照元 irix_oplocks_available()・linux_setlease()・reattach_dmapi_session().
00819 { 00820 #if defined(HAVE_POSIX_CAPABILITIES) 00821 set_process_capability(capability, True); 00822 #endif /* HAVE_POSIX_CAPABILITIES */ 00823 }
void drop_effective_capability | ( | enum smbd_capability | capability | ) |
参照元 chat_with_program()・smbrun_internal()・smbrunsecret().
00826 { 00827 #if defined(HAVE_POSIX_CAPABILITIES) 00828 set_process_capability(capability, False); 00829 #endif /* HAVE_POSIX_CAPABILITIES */ 00830 }
long sys_random | ( | void | ) |
参照元 generate_trn_id()・rand_buf()・run_randomipc()・rw_torture()・rw_torture2()・rw_torture3()・sync_all_dmbs().
00837 { 00838 #if defined(HAVE_RANDOM) 00839 return (long)random(); 00840 #elif defined(HAVE_RAND) 00841 return (long)rand(); 00842 #else 00843 DEBUG(0,("Error - no random function available !\n")); 00844 exit(1); 00845 #endif 00846 }
void sys_srandom | ( | unsigned int | seed | ) |
参照元 create_procs()・generate_trn_id()・main().
00853 { 00854 #if defined(HAVE_SRANDOM) 00855 srandom(seed); 00856 #elif defined(HAVE_SRAND) 00857 srand(seed); 00858 #else 00859 DEBUG(0,("Error - no srandom function available !\n")); 00860 exit(1); 00861 #endif 00862 }
int groups_max | ( | void | ) |
参照元 getgroups_unix_user()・sys_getgroups()・sys_setgroups().
00869 { 00870 #if defined(SYSCONF_SC_NGROUPS_MAX) 00871 int ret = sysconf(_SC_NGROUPS_MAX); 00872 return (ret == -1) ? NGROUPS_MAX : ret; 00873 #else 00874 return NGROUPS_MAX; 00875 #endif 00876 }
int sys_getgroups | ( | int | setlen, | |
gid_t * | gidset | |||
) |
参照先 errno・groups_max().
参照元 get_current_groups()・push_sec_ctx().
00883 { 00884 #if !defined(HAVE_BROKEN_GETGROUPS) 00885 return getgroups(setlen, gidset); 00886 #else 00887 00888 GID_T gid; 00889 GID_T *group_list; 00890 int i, ngroups; 00891 00892 if(setlen == 0) { 00893 return getgroups(setlen, &gid); 00894 } 00895 00896 /* 00897 * Broken case. We need to allocate a 00898 * GID_T array of size setlen. 00899 */ 00900 00901 if(setlen < 0) { 00902 errno = EINVAL; 00903 return -1; 00904 } 00905 00906 if (setlen == 0) 00907 setlen = groups_max(); 00908 00909 if((group_list = (GID_T *)malloc(setlen * sizeof(GID_T))) == NULL) { 00910 DEBUG(0,("sys_getgroups: Malloc fail.\n")); 00911 return -1; 00912 } 00913 00914 if((ngroups = getgroups(setlen, group_list)) < 0) { 00915 int saved_errno = errno; 00916 SAFE_FREE(group_list); 00917 errno = saved_errno; 00918 return -1; 00919 } 00920 00921 for(i = 0; i < ngroups; i++) 00922 gidset[i] = (gid_t)group_list[i]; 00923 00924 SAFE_FREE(group_list); 00925 return ngroups; 00926 #endif /* HAVE_BROKEN_GETGROUPS */ 00927 }
int sys_setgroups | ( | int | setlen, | |
gid_t * | gidset | |||
) |
参照先 errno・groups_max().
参照元 getgrouplist_internals()・pop_sec_ctx()・set_sec_ctx().
00936 { 00937 #if !defined(HAVE_SETGROUPS) 00938 errno = ENOSYS; 00939 return -1; 00940 #endif /* HAVE_SETGROUPS */ 00941 00942 #if !defined(HAVE_BROKEN_GETGROUPS) 00943 return setgroups(setlen, gidset); 00944 #else 00945 00946 GID_T *group_list; 00947 int i ; 00948 00949 if (setlen == 0) 00950 return 0 ; 00951 00952 if (setlen < 0 || setlen > groups_max()) { 00953 errno = EINVAL; 00954 return -1; 00955 } 00956 00957 /* 00958 * Broken case. We need to allocate a 00959 * GID_T array of size setlen. 00960 */ 00961 00962 if((group_list = (GID_T *)malloc(setlen * sizeof(GID_T))) == NULL) { 00963 DEBUG(0,("sys_setgroups: Malloc fail.\n")); 00964 return -1; 00965 } 00966 00967 for(i = 0; i < setlen; i++) 00968 group_list[i] = (GID_T) gidset[i]; 00969 00970 if(setgroups(setlen, group_list) != 0) { 00971 int saved_errno = errno; 00972 SAFE_FREE(group_list); 00973 errno = saved_errno; 00974 return -1; 00975 } 00976 00977 SAFE_FREE(group_list); 00978 return 0 ; 00979 #endif /* HAVE_BROKEN_GETGROUPS */ 00980 }
void sys_setpwent | ( | void | ) |
struct passwd* sys_getpwent | ( | void | ) |
void sys_endpwent | ( | void | ) |
struct passwd * sys_getpwnam | ( | const char * | name | ) |
参照先 fake_pwd・num_fake_pwd.
参照元 get_root_nt_token()・getpwnam_alloc()・init_srv_sess_info_1()・smb_complete_connection()・wsys_getpwnam().
01017 { 01018 int i; 01019 01020 for (i=0; i<num_fake_pwd; i++) { 01021 if (strcmp(fake_pwd[i].pw_name, name) == 0) { 01022 DEBUG(10, ("Returning fake user %s\n", name)); 01023 return &fake_pwd[i]; 01024 } 01025 } 01026 01027 return getpwnam(name); 01028 }
struct passwd * sys_getpwuid | ( | uid_t | uid | ) |
参照先 fake_pwd・num_fake_pwd.
参照元 cmd_fstat()・cmd_lstat()・cmd_stat()・getpwuid_alloc()・pdb_default_uid_to_sid()・wsys_getpwuid().
01031 { 01032 int i; 01033 01034 for (i=0; i<num_fake_pwd; i++) { 01035 if (fake_pwd[i].pw_uid == uid) { 01036 DEBUG(10, ("Returning fake user %s\n", 01037 fake_pwd[i].pw_name)); 01038 return &fake_pwd[i]; 01039 } 01040 } 01041 01042 return getpwuid(uid); 01043 }
void faked_create_user | ( | const char * | name | ) |
参照先 fake_pwd・generate_random_buffer()・num_fake_pwd.
参照元 pdb_default_create_user().
01046 { 01047 int i; 01048 uid_t uid; 01049 struct passwd new_pwd; 01050 01051 for (i=0; i<10; i++) { 01052 generate_random_buffer((unsigned char *)&uid, 01053 sizeof(uid)); 01054 if (getpwuid(uid) == NULL) { 01055 break; 01056 } 01057 } 01058 01059 if (i==10) { 01060 /* Weird. No free uid found... */ 01061 return; 01062 } 01063 01064 new_pwd.pw_name = SMB_STRDUP(name); 01065 new_pwd.pw_passwd = SMB_STRDUP("x"); 01066 new_pwd.pw_uid = uid; 01067 new_pwd.pw_gid = 100; 01068 new_pwd.pw_gecos = SMB_STRDUP("faked user"); 01069 new_pwd.pw_dir = SMB_STRDUP("/nodir"); 01070 new_pwd.pw_shell = SMB_STRDUP("/bin/false"); 01071 01072 ADD_TO_ARRAY(NULL, struct passwd, new_pwd, &fake_pwd, 01073 &num_fake_pwd); 01074 01075 DEBUG(10, ("Added fake user %s, have %d fake users\n", 01076 name, num_fake_pwd)); 01077 }
struct group* sys_getgrnam | ( | const char * | name | ) |
struct group* sys_getgrgid | ( | gid_t | gid | ) |
int wsys_stat | ( | const smb_ucs2_t * | wfname, | |
SMB_STRUCT_STAT * | sbuf | |||
) |
参照先 sys_stat().
01116 { 01117 pstring fname; 01118 return sys_stat(unicode_to_unix(fname,wfname,sizeof(fname)), sbuf); 01119 }
int wsys_lstat | ( | const smb_ucs2_t * | wfname, | |
SMB_STRUCT_STAT * | sbuf | |||
) |
参照先 sys_lstat().
01126 { 01127 pstring fname; 01128 return sys_lstat(unicode_to_unix(fname,wfname,sizeof(fname)), sbuf); 01129 }
int wsys_creat | ( | const smb_ucs2_t * | wfname, | |
mode_t | mode | |||
) |
int wsys_open | ( | const smb_ucs2_t * | wfname, | |
int | oflag, | |||
mode_t | mode | |||
) |
FILE* wsys_fopen | ( | const smb_ucs2_t * | wfname, | |
const char * | type | |||
) |
SMB_STRUCT_DIR* wsys_opendir | ( | const smb_ucs2_t * | wfname | ) |
SMB_STRUCT_WDIRENT* wsys_readdir | ( | SMB_STRUCT_DIR * | dirp | ) |
参照先 sys_readdir().
01176 { 01177 static SMB_STRUCT_WDIRENT retval; 01178 SMB_STRUCT_DIRENT *dirval = sys_readdir(dirp); 01179 01180 if(!dirval) 01181 return NULL; 01182 01183 /* 01184 * The only POSIX defined member of this struct is d_name. 01185 */ 01186 01187 unix_to_unicode(retval.d_name,dirval->d_name,sizeof(retval.d_name)); 01188 01189 return &retval; 01190 }
smb_ucs2_t* wsys_getwd | ( | smb_ucs2_t * | s | ) |
int wsys_chown | ( | const smb_ucs2_t * | wfname, | |
uid_t | uid, | |||
gid_t | gid | |||
) |
int wsys_chroot | ( | const smb_ucs2_t * | wfname | ) |
SMB_STRUCT_WPASSWD* wsys_getpwnam | ( | const smb_ucs2_t * | wname | ) |
参照先 name・sys_getpwnam().
01232 { 01233 static SMB_STRUCT_WPASSWD retval; 01234 fstring name; 01235 struct passwd *pwret = sys_getpwnam(unicode_to_unix(name,wname,sizeof(name))); 01236 01237 if(!pwret) 01238 return NULL; 01239 01240 unix_to_unicode(retval.pw_name, pwret->pw_name, sizeof(retval.pw_name)); 01241 retval.pw_passwd = pwret->pw_passwd; 01242 retval.pw_uid = pwret->pw_uid; 01243 retval.pw_gid = pwret->pw_gid; 01244 unix_to_unicode(retval.pw_gecos, pwret->pw_gecos, sizeof(retval.pw_gecos)); 01245 unix_to_unicode(retval.pw_dir, pwret->pw_dir, sizeof(retval.pw_dir)); 01246 unix_to_unicode(retval.pw_shell, pwret->pw_shell, sizeof(retval.pw_shell)); 01247 01248 return &retval; 01249 }
SMB_STRUCT_WPASSWD* wsys_getpwuid | ( | uid_t | uid | ) |
参照先 sys_getpwuid().
01256 { 01257 static SMB_STRUCT_WPASSWD retval; 01258 struct passwd *pwret = sys_getpwuid(uid); 01259 01260 if(!pwret) 01261 return NULL; 01262 01263 unix_to_unicode(retval.pw_name, pwret->pw_name, sizeof(retval.pw_name)); 01264 retval.pw_passwd = pwret->pw_passwd; 01265 retval.pw_uid = pwret->pw_uid; 01266 retval.pw_gid = pwret->pw_gid; 01267 unix_to_unicode(retval.pw_gecos, pwret->pw_gecos, sizeof(retval.pw_gecos)); 01268 unix_to_unicode(retval.pw_dir, pwret->pw_dir, sizeof(retval.pw_dir)); 01269 unix_to_unicode(retval.pw_shell, pwret->pw_shell, sizeof(retval.pw_shell)); 01270 01271 return &retval; 01272 }
static char** extract_args | ( | const char * | command | ) | [static] |
参照先 errno.
参照元 sys_popen().
01281 { 01282 static pstring trunc_cmd; 01283 char *ptr; 01284 int argcl; 01285 char **argl = NULL; 01286 int i; 01287 01288 pstrcpy(trunc_cmd, command); 01289 01290 if(!(ptr = strtok(trunc_cmd, " \t"))) { 01291 errno = EINVAL; 01292 return NULL; 01293 } 01294 01295 /* 01296 * Count the args. 01297 */ 01298 01299 for( argcl = 1; ptr; ptr = strtok(NULL, " \t")) 01300 argcl++; 01301 01302 if((argl = (char **)SMB_MALLOC((argcl + 1) * sizeof(char *))) == NULL) 01303 return NULL; 01304 01305 /* 01306 * Now do the extraction. 01307 */ 01308 01309 pstrcpy(trunc_cmd, command); 01310 01311 ptr = strtok(trunc_cmd, " \t"); 01312 i = 0; 01313 argl[i++] = ptr; 01314 01315 while((ptr = strtok(NULL, " \t")) != NULL) 01316 argl[i++] = ptr; 01317 01318 argl[i++] = NULL; 01319 return argl; 01320 }
pid_t sys_fork | ( | void | ) |
参照先 mypid.
参照元 become_daemon()・chat_with_program()・daemonize()・fork_child_dc_connect()・fork_domain_child()・init_mount()・open_sockets_smbd()・smbrun_internal()・smbrunsecret()・start_async_dns()・start_background_queue()・sync_browse_lists()・sys_popen()・wins_write_database().
01330 { 01331 pid_t forkret = fork(); 01332 01333 if (forkret == (pid_t)0) /* Child - reset mypid so sys_getpid does a system call. */ 01334 mypid = (pid_t) -1; 01335 01336 return forkret; 01337 }
pid_t sys_getpid | ( | void | ) |
参照先 mypid.
参照元 _Insure_trap_error()・_svcctl_query_service_status_ex()・alloc_sub_basic()・another_ldap_try()・cli_initialise()・cli_send_mailslot()・cmd_print()・count_current_connections()・create_policy_hnd()・dbghdr()・dfs_auth()・dfs_unlogin()・do_connection()・do_reseed()・do_winbind_onlinestatus()・fam_open_connection()・fault_report()・file_new()・fill_pipe_open_rec()・fork_child_dc_connect()・fork_domain_child()・generate_name_trn_id()・generate_trn_id()・get_printer_notify_pid_list()・get_rand_seed()・init_dmapi_service()・irix_oplocks_available()・main()・message_dispatch()・msg_inject_fault()・open_rpc_pipe_p()・parse_dest()・pidfile_create()・print_job_end()・print_job_endpage()・print_job_fd()・print_job_fname()・print_job_set_name()・print_job_start()・print_job_write()・print_notify_deregister_pid()・print_notify_register_pid()・process_kernel_oplocks()・process_oplock_async_level2_break_message()・process_oplock_break_message()・procid_is_me()・procid_self()・reply_lanman1()・reply_lanman2()・reply_nt1()・retrieve_all_messages()・send_fs_socket()・session_claim()・set_updating_pid()・shutdown_other_smbds()・smb_panic()・smb_umount()・smbc_init_context()・smbldap_open()・srv_spoolss_drv_upgrade_printer()・srv_spoolss_reset_printerdata()・switch_message()・sys_select()・sys_utmp_fill()・wins_write_database().
int sys_popen | ( | const char * | command | ) |
参照先 _popen_list::child_pid・errno・extract_args()・_popen_list::fd・_popen_list::next・popen_chain・sys_fork().
参照元 file_pload().
01367 { 01368 int parent_end, child_end; 01369 int pipe_fds[2]; 01370 popen_list *entry = NULL; 01371 char **argl = NULL; 01372 01373 if (pipe(pipe_fds) < 0) 01374 return -1; 01375 01376 parent_end = pipe_fds[0]; 01377 child_end = pipe_fds[1]; 01378 01379 if (!*command) { 01380 errno = EINVAL; 01381 goto err_exit; 01382 } 01383 01384 if((entry = SMB_MALLOC_P(popen_list)) == NULL) 01385 goto err_exit; 01386 01387 ZERO_STRUCTP(entry); 01388 01389 /* 01390 * Extract the command and args into a NULL terminated array. 01391 */ 01392 01393 if(!(argl = extract_args(command))) 01394 goto err_exit; 01395 01396 entry->child_pid = sys_fork(); 01397 01398 if (entry->child_pid == -1) { 01399 goto err_exit; 01400 } 01401 01402 if (entry->child_pid == 0) { 01403 01404 /* 01405 * Child ! 01406 */ 01407 01408 int child_std_end = STDOUT_FILENO; 01409 popen_list *p; 01410 01411 close(parent_end); 01412 if (child_end != child_std_end) { 01413 dup2 (child_end, child_std_end); 01414 close (child_end); 01415 } 01416 01417 /* 01418 * POSIX.2: "popen() shall ensure that any streams from previous 01419 * popen() calls that remain open in the parent process are closed 01420 * in the new child process." 01421 */ 01422 01423 for (p = popen_chain; p; p = p->next) 01424 close(p->fd); 01425 01426 execv(argl[0], argl); 01427 _exit (127); 01428 } 01429 01430 /* 01431 * Parent. 01432 */ 01433 01434 close (child_end); 01435 SAFE_FREE(argl); 01436 01437 /* Link into popen_chain. */ 01438 entry->next = popen_chain; 01439 popen_chain = entry; 01440 entry->fd = parent_end; 01441 01442 return entry->fd; 01443 01444 err_exit: 01445 01446 SAFE_FREE(entry); 01447 SAFE_FREE(argl); 01448 close(pipe_fds[0]); 01449 close(pipe_fds[1]); 01450 return -1; 01451 }
int sys_pclose | ( | int | fd | ) |
参照先 _popen_list::next・popen_chain・status.
参照元 file_pload().
01458 { 01459 int wstatus; 01460 popen_list **ptr = &popen_chain; 01461 popen_list *entry = NULL; 01462 pid_t wait_pid; 01463 int status = -1; 01464 01465 /* Unlink from popen_chain. */ 01466 for ( ; *ptr != NULL; ptr = &(*ptr)->next) { 01467 if ((*ptr)->fd == fd) { 01468 entry = *ptr; 01469 *ptr = (*ptr)->next; 01470 status = 0; 01471 break; 01472 } 01473 } 01474 01475 if (status < 0 || close(entry->fd) < 0) 01476 return -1; 01477 01478 /* 01479 * As Samba is catching and eating child process 01480 * exits we don't really care about the child exit 01481 * code, a -1 with errno = ECHILD will do fine for us. 01482 */ 01483 01484 do { 01485 wait_pid = sys_waitpid (entry->child_pid, &wstatus, 0); 01486 } while (wait_pid == -1 && errno == EINTR); 01487 01488 SAFE_FREE(entry); 01489 01490 if (wait_pid == -1) 01491 return -1; 01492 return wstatus; 01493 }
void* sys_dlopen | ( | const char * | name, | |
int | flags | |||
) |
参照元 do_smb_load_module()・find_fn()・init_gpfs().
01500 { 01501 #if defined(HAVE_DLOPEN) 01502 return dlopen(name, flags); 01503 #else 01504 return NULL; 01505 #endif 01506 }
void* sys_dlsym | ( | void * | handle, | |
const char * | symbol | |||
) |
参照元 do_smb_load_module()・find_fn()・init_gpfs().
01509 { 01510 #if defined(HAVE_DLSYM) 01511 return dlsym(handle, symbol); 01512 #else 01513 return NULL; 01514 #endif 01515 }
int sys_dlclose | ( | void * | handle | ) |
参照元 init_gpfs().
01518 { 01519 #if defined(HAVE_DLCLOSE) 01520 return dlclose(handle); 01521 #else 01522 return 0; 01523 #endif 01524 }
const char* sys_dlerror | ( | void | ) |
参照元 do_smb_load_module().
01527 { 01528 #if defined(HAVE_DLERROR) 01529 return dlerror(); 01530 #else 01531 return NULL; 01532 #endif 01533 }
int sys_dup2 | ( | int | oldfd, | |
int | newfd | |||
) |
参照先 errno.
参照元 dochild()・reopen_logs()・smbrun_internal()・smbrunsecret().
01536 { 01537 #if defined(HAVE_DUP2) 01538 return dup2(oldfd, newfd); 01539 #else 01540 errno = ENOSYS; 01541 return -1; 01542 #endif 01543 }
void sys_adminlog | ( | int | priority, | |
const char * | format_str, | |||
... | ||||
) |
参照先 msgbuf・vasprintf().
参照元 print_job_delete()・print_job_pause()・print_job_resume().
01550 { 01551 va_list ap; 01552 int ret; 01553 char *msgbuf = NULL; 01554 01555 va_start( ap, format_str ); 01556 ret = vasprintf( &msgbuf, format_str, ap ); 01557 va_end( ap ); 01558 01559 if (ret == -1) 01560 return; 01561 01562 #if defined(HAVE_SYSLOG) 01563 syslog( priority, "%s", msgbuf ); 01564 #else 01565 DEBUG(0,("%s", msgbuf )); 01566 #endif 01567 SAFE_FREE(msgbuf); 01568 }
static int solaris_write_xattr | ( | int | attrfd, | |
const char * | value, | |||
size_t | size | |||
) | [static] |
参照元 sys_fsetxattr()・sys_lsetxattr()・sys_setxattr().
02427 { 02428 if ((ftruncate(attrfd, 0) == 0) && (write(attrfd, value, size) == size)) { 02429 return 0; 02430 } else { 02431 DEBUG(10,("solaris_write_xattr FAILED!\n")); 02432 return -1; 02433 } 02434 }
static ssize_t solaris_read_xattr | ( | int | attrfd, | |
void * | value, | |||
size_t | size | |||
) | [static] |
参照先 errno.
参照元 sys_fgetxattr()・sys_getxattr()・sys_lgetxattr().
02318 { 02319 struct stat sbuf; 02320 02321 if (fstat(attrfd, &sbuf) == -1) { 02322 errno = ENOATTR; 02323 return -1; 02324 } 02325 02326 /* This is to return the current size of the named extended attribute */ 02327 if (size == 0) { 02328 return sbuf.st_size; 02329 } 02330 02331 /* check size and read xattr */ 02332 if (sbuf.st_size > size) { 02333 errno = ERANGE; 02334 return -1; 02335 } 02336 02337 return read(attrfd, value, sbuf.st_size); 02338 }
static ssize_t solaris_list_xattr | ( | int | attrdirfd, | |
char * | list, | |||
size_t | size | |||
) | [static] |
参照先 closedir()・errno・len・readdir()・strerror().
参照元 sys_flistxattr()・sys_listxattr()・sys_llistxattr().
02341 { 02342 ssize_t len = 0; 02343 int stop = 0; 02344 DIR *dirp; 02345 struct dirent *de; 02346 int newfd = dup(attrdirfd); 02347 /* CAUTION: The originating file descriptor should not be 02348 used again following the call to fdopendir(). 02349 For that reason we dup() the file descriptor 02350 here to make things more clear. */ 02351 dirp = fdopendir(newfd); 02352 02353 while ((de = readdir(dirp))) { 02354 size_t listlen = strlen(de->d_name); 02355 if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) { 02356 /* we don't want "." and ".." here: */ 02357 DEBUG(10,("skipped EA %s\n",de->d_name)); 02358 continue; 02359 } 02360 02361 if (size == 0) { 02362 /* return the current size of the list of extended attribute names*/ 02363 len += listlen + 1; 02365 /* check size and copy entrie02364 } else {