summaryrefslogtreecommitdiff
path: root/src/sh/main.cc
blob: 4926b77c86041fbc012f42aa7eaa64a441a03373 (plain)
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;
}

///////////////////////////////////////////////////