8 char const *cvs_id
= "$Id: sessionctl.c,v 1.2 2005/05/10 06:48:16 bodea Exp $";
10 int plugin_api_version
= PLUGIN_API_VERSION
;
11 static struct pluginfuncs
*p
= 0;
13 char *plugin_control_help
[] = {
14 " drop USER|SID [REASON] Shutdown user session",
15 " kill USER|SID [REASON] Kill user session",
19 int plugin_init(struct pluginfuncs
*funcs
)
28 int plugin_control(struct param_control
*data
)
38 if (strcmp(data
->argv
[0], "drop") && strcmp(data
->argv
[0], "kill"))
39 return PLUGIN_RET_OK
; // not for us
41 if (!data
->iam_master
)
42 return PLUGIN_RET_NOTMASTER
;
44 if (data
->argc
< 2 || data
->argc
> 3)
46 data
->response
= NSCTL_RES_ERR
;
47 data
->additional
= "requires username or session id and optional reason";
48 return PLUGIN_RET_STOP
;
51 if (!(session
= strtol(data
->argv
[1], &end
, 10)) || *end
)
52 session
= p
->get_session_by_username(data
->argv
[1]);
55 s
= p
->get_session_by_id(session
);
59 data
->response
= NSCTL_RES_ERR
;
60 data
->additional
= "session not found";
61 return PLUGIN_RET_STOP
;
65 reason
= data
->argv
[2];
67 reason
= "Requested by administrator.";
69 if (data
->argv
[0][0] == 'd')
70 p
->sessionshutdown(session
, reason
, 3, 0);
72 p
->sessionkill(session
, reason
);
74 data
->response
= NSCTL_RES_OK
;
77 return PLUGIN_RET_STOP
;