1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
/*************************************************************************
*
* HTCd - Copyright (C) 1998-2006 Henrik Rydberg
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <sh/htc.h>
#include <pwd.h>
#include <sys/stat.h>
#include <sys/utsname.h>
const mstring PREFSMAP=htchome()+sref("/htc/prefs.hdb");
const mstring SYSLOG=htchome()+sref("/log/htc.log");
static fp_stream mout(stdout),merr(stderr);
///////////////////////////////////////////////////
mstring Cwd() {
static char buf[1024];
mstring cwd=getcwd(buf,1024);
cwd+='/';
return cwd;
}
///////////////////////////////////////////////////
static void OpenUSERS(dbmap& db)
{
db.Open(USERMAP,1);
if(db.Tables()==0) for(int i=0;i<user_tabs;i++) db.InsertTable(i,user_tab[i]);
}
static void OpenPREFS(dbmap& db)
{
db.Open(PREFSMAP,1);
if(db.Tables()==0) for(int i=0;i<prefs_tabs;i++) db.InsertTable(i,prefs_tab[i]);
}
htc_user::htc_user(tokmap& p) : toks(p)
{
OpenUSERS(DBRef(toks,USERS_tag,ms_empty,tok_t::SYSONLY)->db);
OpenPREFS(DBRef(toks,PREFS_tag,ms_empty,tok_t::SYSONLY)->db);
}
///////////////////////////////////////////////////
htc_req::htc_req(HTC& g,tokmap& p) : req_env(g,p)
{
user.reset();
}
///////////////////////////////////////////////////
void envAddFile(tokmap& map);
void envAddConvert(tokmap& map);
void envAddDates(tokmap& map);
void envAddUser(tokmap& map) throw(merror_t);
void envAddTree(tokmap& map);
void envAddSys(tokmap& map);
void envAddNet(tokmap& map);
///////////////////////////////////////////////////
HTC::HTC(const sref& root):
syslog(fopen(SYSLOG.c_str(),"a+"))
{
docroot=root; if(docroot.back()=='/') docroot=docroot.popb();
username=getpwuid(getuid())->pw_name;
envAddFile(toks);
envAddConvert(toks);
envAddDates(toks);
envAddUser(toks);
envAddTree(toks);
envAddSys(toks);
envAddNet(toks);
}
///////////////////////////////////////////////////
HTC::~HTC()
{
fclose(syslog.fp);
}
///////////////////////////////////////////////////
void HTC::setHost(const sref& s)
{
host=s;
if(!Lookup(node,host)) THROW("sys: host "<<host<<" not listed in nameserver");
}
///////////////////////////////////////////////////
void HTC::setDomain(const sref& s)
{
domain=s;
}
///////////////////////////////////////////////////
void HTC::setPort(int p)
{
port=p;
}
///////////////////////////////////////////////////
void HTC::setMailer(const sref& s)
{
mailer=s;
}
///////////////////////////////////////////////////
|