]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/rpcconfig/info_methods.cpp
Усунуто проблему race conditions у rscriptd
[stg.git] / projects / stargazer / plugins / configuration / rpcconfig / info_methods.cpp
1 #include "info_methods.h"
2
3 #include <sys/utsname.h>
4 #include "version.h"
5 #include "rpcconfig.h"
6
7 void METHOD_INFO::execute(xmlrpc_c::paramList const & paramList,
8                           xmlrpc_c::value *   const   retvalPtr)
9 {
10 paramList.verifyEnd(0);
11 std::map<std::string, xmlrpc_c::value> structVal;
12
13 std::string un;
14 struct utsname utsn;
15
16 uname(&utsn);
17 un[0] = 0;
18
19 un += utsn.sysname;
20 un += " ";
21 un += utsn.release;
22 un += " ";
23 un += utsn.machine;
24 un += " ";
25 un += utsn.nodename;
26
27 structVal["version"] = xmlrpc_c::value_string(SERVER_VERSION);
28 structVal["tariff_num"] = xmlrpc_c::value_int(tariffs->GetTariffsNum());
29 structVal["tariff"] = xmlrpc_c::value_int(2);
30 structVal["users_num"] = xmlrpc_c::value_int(users->GetUserNum());
31 structVal["uname"] = xmlrpc_c::value_string(un);
32 structVal["dir_num"] = xmlrpc_c::value_int(DIR_NUM);
33 structVal["day_fee"] = xmlrpc_c::value_int(settings->GetDayFee());
34
35 std::vector<xmlrpc_c::value> dirnameVal;
36
37 for (int i = 0; i< DIR_NUM; i++)
38     {
39     string dn2e;
40     Encode12str(dn2e, settings->GetDirName(i));
41     dirnameVal.push_back(xmlrpc_c::value_string(dn2e));
42     }
43
44 structVal["dir_names"] = xmlrpc_c::value_array(dirnameVal);
45
46 *retvalPtr = xmlrpc_c::value_struct(structVal);
47 }
48
49 void METHOD_LOGIN::execute(xmlrpc_c::paramList const & paramList,
50                            xmlrpc_c::value *   const   retvalPtr)
51 {
52 std::string login = paramList.getString(0);
53 std::string password = paramList.getString(1);
54 paramList.verifyEnd(2);
55
56 std::map<std::string, xmlrpc_c::value> structVal;
57
58 std::string cookie;
59 if (config->CheckAdmin(login, password, &cookie))
60     {
61     structVal["result"] = xmlrpc_c::value_boolean(false);
62     structVal["cookie"] = xmlrpc_c::value_string("");
63     }
64 else
65     {
66     structVal["result"] = xmlrpc_c::value_boolean(true);
67     structVal["cookie"] = xmlrpc_c::value_string(cookie);
68     }
69
70 *retvalPtr = xmlrpc_c::value_struct(structVal);
71 }
72
73 void METHOD_LOGOUT::execute(xmlrpc_c::paramList const & paramList,
74                             xmlrpc_c::value *   const   retvalPtr)
75 {
76 std::string cookie = paramList.getString(0);
77 paramList.verifyEnd(1);
78
79 std::map<std::string, xmlrpc_c::value> structVal;
80
81 if (config->LogoutAdmin(cookie))
82     {
83     *retvalPtr = xmlrpc_c::value_boolean(false);
84     }
85 else
86     {
87     *retvalPtr = xmlrpc_c::value_boolean(true);
88     }
89 }