* create both libinternal-diet.a and libinternal-glibc.a. This is
[util-vserver.git] / util-vserver / lib_internal / matchlist-initbyvserver.c
1 // $Id$    --*- c -*--
2
3 // Copyright (C) 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.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; version 2 of the License.
8 //  
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //  
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
18
19 #ifdef HAVE_CONFIG_H
20 #  include <config.h>
21 #endif
22 #include "pathconfig.h"
23
24 #include "matchlist.h"
25 #include "util-io.h"
26
27 #include "vserver.h"
28
29
30
31 bool
32 MatchList_initByVserver(struct MatchList *list,
33                         struct MatchVserverInfo const *vserver,
34                         char const **res_appdir)
35 {
36   vcCfgStyle    style;
37   char const    *vdir;
38   char const    *appdir;
39
40   style  = vc_getVserverCfgStyle(vserver->name);
41   vdir   = vc_getVserverVdir(  vserver->name, style, true);
42   appdir = vc_getVserverAppDir(vserver->name, style, "vunify");
43
44   if (vdir==0 || appdir==0) {
45     free((char *)appdir);
46     free((char *)vdir);
47     return false;
48   }
49
50   {
51     size_t              l1 = strlen(appdir);
52     char                tmp[l1 + sizeof("/exclude")];
53     char const *        excl_list;
54
55     memcpy(tmp,    appdir, l1);
56     memcpy(tmp+l1, "/exclude", 9);
57
58     excl_list = tmp;
59     if (access(excl_list, R_OK)==-1) excl_list = CONFDIR   "/.defaults/apps/vunify/exclude";
60     if (access(excl_list, R_OK)==-1) excl_list = PKGLIBDIR "/defaults/vunify-exclude";
61
62       // 'vdir' is transferred to matchlist and must not be free'ed here
63     MatchList_initManually(list, vserver, vdir, excl_list);
64   }
65
66   if (res_appdir!=0)
67     *res_appdir = appdir;
68   else
69     free((char *)appdir);
70   
71   return true;
72 }
73