HSAdmin Backend Domains, E-Mail, Datenbanken
Purodha
2013-02-20 4a7e12928010374d76e677c8ec3ea4f5e63e9487
commit | author | age
c64ab5 1 /***************************************************************************
CD 2  *   Copyright (C) 2005 by Christof Donat   *
3  *   cdonat@gmx.de   *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) any later version.                                   *
9  *                                                                         *
10  *   This program is distributed in the hope that it will be useful,       *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with this program; if not, write to the                         *
17  *   Free Software Foundation, Inc.,                                       *
18  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19  ***************************************************************************/
20
21 #include <vector>
22 #include <string>
23 #include <iostream>
24
25 #ifndef HSADMIN_CONFIGFILE
26 #define HSADMIN_CONFIGFILE
27
28 #include "transaction.h"
29
30 using std::vector;
31 using std::string;
32 using std::iostream;
33
34 //! this class manages configfiles
35 class ConfigFileFinder: public vector<string*> {
36     public:
37     //! find the standard config-files
38     ConfigFileFinder(Transaction& t);
39     //! load a config file
40     void loadFile(string filename);
41 };
42
43 //! parser for config files
44 class ConfigFileParser {
45     public:
46     //! parses one text
47     inline ConfigFileParser(string& text) { this->parse(text); };
48     //! parses multiple texts
49     inline ConfigFileParser(vector<string*>* texts) { this->parse(texts); };    
50
51     inline string getTicket() { string s = ""; return getTicket(s); };
52
53     /** \brief get a ticket for a specified user. 
54      *
55      * this function finds the config for this user and calls the tocket-command
56      * with the specified shell.
57      */
58     string getTicket(string &username);
59
60     //! replaces references (\0, \1, etc.) in content with regex-matches.
61     static string replaceStringMatches(string &userpattern, string username, string content);
62
63     //! holds single config entries
64     struct config {
65         string pattern;
66         string ticketcommand;
67         string server;
68         string shell;
69         bool askpass;
70
71         string getTicketcommand(string &username) { return ConfigFileParser::replaceStringMatches(pattern,username,ticketcommand); };
72         string getServer(string &username) { return ConfigFileParser::replaceStringMatches(pattern,username,ticketcommand); };
73         string getShell(string &username) { return ConfigFileParser::replaceStringMatches(pattern,username,ticketcommand); };
74     };
75
76     //! find the config for a specified user
77     config& getConfig(string &username);
78
79     private:
80     void parse(string& text);
81     inline void parse(vector<string*>* texts) {
82         for( vector<string*>::iterator i = texts->begin(); i != texts->end(); i++ ) 
83             this->parse(**i);
84     }
85
86     vector<config> configs;
87     config basic;
88 };
89
90 #else
91 class ConfigFileFinder;
92 class ConfigFileParser;
93
94 #endif /* HSADMIN_CONFIGFILE */