関数 | |
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 |
uint32 dmapi_file_flags | ( | const char *const | path | ) |
BOOL dmapi_have_session | ( | void | ) |
static int init_dmapi_service | ( | void | ) | [static] |
参照先 mypid・sys_getpid().
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] |
static int reattach_dmapi_session | ( | void | ) | [static] |
参照先 become_root()・DMAPI_ACCESS_CAPABILITY・dmapi_session・init_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] |