libcap.h
上传用户:pycemail
上传日期:2007-01-04
资源大小:329k
文件大小:4k
源码类别:

Ftp客户端

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: libcap.h,v 1.2 1999/09/07 23:14:19 macgyver Exp $
  3.  *
  4.  * Copyright (c) 1997 Andrew G Morgan <morgan@linux.kernel.org>
  5.  *
  6.  * See end of file for Log.
  7.  *
  8.  * This file contains internal definitions for the various functions in
  9.  * this small capability library.
  10.  */
  11. #ifndef LIBCAP_H
  12. #define LIBCAP_H
  13. #include <sys/types.h>
  14. #include <errno.h>
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <string.h>
  18. #include "include/sys/capability.h"
  19. #ifndef __u8
  20. #define __u8    unsigned char
  21. #endif /* __8 */
  22. #ifndef __u32
  23. #define __u32   unsigned int
  24. #endif /* __u32 */
  25. /* include the names for the caps and a definition of __CAP_BITS */
  26. #include "cap_names.h"
  27. /*
  28.  * This is a pointer to a struct containing three consecutive
  29.  * capability sets in the order of the cap_flag_t type: the are
  30.  * effective,inheritable and permitted.  This is the type that the
  31.  * user-space routines think of as 'internal' capabilities - this is
  32.  * the type that is passed to the kernel with the system calls related
  33.  * to processes.
  34.  */
  35. #define CAP_T_MAGIC 0xCA90D0
  36. struct _cap_struct {
  37.     int magic;
  38.     struct __user_cap_header_struct head;
  39.     struct __user_cap_data_struct set;
  40. };
  41. /*
  42.  * Do we match the local kernel?
  43.  */
  44. #if !defined(_LINUX_CAPABILITY_VERSION) || 
  45.             (_LINUX_CAPABILITY_VERSION != 0x19980330)
  46. # error "Kernel <linux/capability.h> does not match library"
  47. # error "file "libcap.h" --> fix and recompile libcap"
  48. #endif
  49. /*
  50.  * kernel API cap set abstraction
  51.  */
  52. #define NUMBER_OF_CAP_SETS      3   /* effective, inheritable, permitted */
  53. #define CAP_SET_SIZE (sizeof(struct __user_cap_data_struct)/NUMBER_OF_CAP_SETS)
  54. #define __CAP_BLKS   (CAP_SET_SIZE/sizeof(__u32))
  55. typedef struct {
  56.     __u32 _blk[__CAP_BLKS];
  57. } __cap_s;
  58. #define raise_cap(x)   _blk[(x)>>5] |= (1<<((x)&31))
  59. #define lower_cap(x)   _blk[(x)>>5] &= ~(1<<((x)&31))
  60. #define isset_cap(y,x) ((y)->_blk[(x)>>5] & (1<<((x)&31)))
  61. /*
  62.  * Private definitions for internal use by the library.
  63.  */
  64. #define good_cap_t(c)      ((c) && (c)->magic == CAP_T_MAGIC)
  65. /*
  66.  * library debugging
  67.  */
  68. #ifdef DEBUG
  69. #include <stdio.h>
  70. # define _cap_debug(f, x...)  { 
  71.     fprintf(stderr, __FUNCTION__ "(" __FILE__ ":%d): ", __LINE__); 
  72.     fprintf(stderr, f, ## x); 
  73.     fprintf(stderr, "n"); 
  74. }
  75. # define _cap_debugcap(s, c) 
  76.     fprintf(stderr, __FUNCTION__ "(" __FILE__ ":%d): " s 
  77.        "%08xn", __LINE__, c)
  78. #else /* !DEBUG */
  79. # define _cap_debug(f, x...)
  80. # define _cap_debugcap(s, c)
  81. #endif /* DEBUG */
  82. /*
  83.  * These are semi-public prototypes, they will only be defined in
  84.  * <sys/capability.h> if _POSIX_SOURCE is not #define'd, so we
  85.  * place them here too.
  86.  */
  87. extern int capset(cap_user_header_t header, cap_user_data_t data);
  88. extern int capget(cap_user_header_t header, const cap_user_data_t data);
  89. extern int capgetp(pid_t pid, cap_t cap_d);
  90. extern int capsetp(pid_t pid, cap_t cap_d);
  91. #endif /* LIBCAP_H */
  92. /*
  93.  * $Log: libcap.h,v $
  94.  * Revision 1.2  1999/09/07 23:14:19  macgyver
  95.  * Updated capabilities library and model.
  96.  *
  97.  * Revision 1.2  1999/04/17 23:25:10  morgan
  98.  * fixes from peeterj
  99.  *
  100.  * Revision 1.1.1.1  1999/04/17 22:16:31  morgan
  101.  * release 1.0 of libcap
  102.  *
  103.  * Revision 1.5  1998/06/08 00:15:28  morgan
  104.  * accommodate alpha (glibc?)
  105.  *
  106.  * Revision 1.4  1998/06/07 15:58:23  morgan
  107.  * accommodate real kernel header files :*)
  108.  *
  109.  * Revision 1.3  1998/05/24 22:54:09  morgan
  110.  * updated for 2.1.104
  111.  *
  112.  * Revision 1.2  1997/04/28 00:57:11  morgan
  113.  * zefram's replacement file with a number of bug fixes from AGM
  114.  *
  115.  * Revision 1.1  1997/04/21 04:32:52  morgan
  116.  * Initial revision
  117.  *
  118.  */