smbd/dmapi.c

ソースコードを見る。

関数

int dmapi_init_session (void)
uint32 dmapi_file_flags (const char *const path)
BOOL dmapi_have_session (void)
static int init_dmapi_service (void)
static dm_sessid_t * realloc_session_list (dm_sessid_t *sessions, int count)
static int reattach_dmapi_session (void)

変数

static dm_sessid_t dmapi_session = DM_NO_SESSION


関数

int dmapi_init_session ( void   ) 

dmapi.c29 行で定義されています。

参照元 main().

00029 { return -1; }

uint32 dmapi_file_flags ( const char *const   path  ) 

dmapi.c30 行で定義されています。

参照元 set_offline_flag().

00030 { return 0; }

BOOL dmapi_have_session ( void   ) 

dmapi.c31 行で定義されています。

参照元 set_offline_flag().

00031 { return False; }

static int init_dmapi_service ( void   )  [static]

dmapi.c56 行で定義されています。

参照先 mypidsys_getpid().

参照元 reattach_dmapi_session().

00057 {
00058         static pid_t lastpid;
00059 
00060         pid_t mypid;
00061 
00062         mypid = sys_getpid();
00063         if (mypid != lastpid) {
00064                 char *version;
00065 
00066                 lastpid = mypid;
00067                 if (dm_init_service(&version) < 0) {
00068                         return -1;
00069                 }
00070 
00071                 DEBUG(0, ("Initializing DMAPI: %s\n", version));
00072         }
00073 
00074         return 0;
00075 }

static dm_sessid_t* realloc_session_list ( dm_sessid_t *  sessions,
int  count 
) [static]

dmapi.c82 行で定義されています。

00083 {
00084         dm_sessid_t *nsessions;
00085 
00086         nsessions = TALLOC_REALLOC_ARRAY(NULL, sessions, dm_sessid_t, count);
00087         if (nsessions == NULL) {
00088                 TALLOC_FREE(sessions);
00089                 return NULL;
00090         }
00091 
00092         return nsessions;
00093 }

static int reattach_dmapi_session ( void   )  [static]

dmapi.c182 行で定義されています。

参照先 become_root()DMAPI_ACCESS_CAPABILITYdmapi_sessioninit_dmapi_service()set_effective_capability()unbecome_root().

00183 {
00184         char    buf[DM_SESSION_INFO_LEN];
00185         size_t  buflen;
00186 
00187         if (dmapi_session != DM_NO_SESSION ) {
00188                 become_root();
00189 
00190                 /* NOTE: On Linux, this call opens /dev/dmapi, costing us a
00191                  * file descriptor. Ideally, we would close this when we fork.
00192                  */
00193                 if (init_dmapi_service() < 0) {
00194                         dmapi_session = DM_NO_SESSION;
00195                         unbecome_root();
00196                         return -1;
00197                 }
00198 
00199                 if (dm_query_session(dmapi_session, sizeof(buf),
00200                             buf, &buflen) < 0) {
00201                         /* Session is stale. Disable DMAPI. */
00202                         dmapi_session = DM_NO_SESSION;
00203                         unbecome_root();
00204                         return -1;
00205                 }
00206 
00207                 set_effective_capability(DMAPI_ACCESS_CAPABILITY);
00208 
00209                 DEBUG(DMAPI_TRACE, ("reattached DMAPI session\n"));
00210                 unbecome_root();
00211         }
00212 
00213         return 0;
00214 }


変数

dm_sessid_t dmapi_session = DM_NO_SESSION [static]

dmapi.c50 行で定義されています。

参照元 reattach_dmapi_session().


Sambaに対してSat Aug 29 21:24:25 2009に生成されました。  doxygen 1.4.7