2 * Copyright (C) 2013 Andreas Steffen
3 * HSR Hochschule fuer Technik Rapperswil
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 #include "imv_policy_manager_usage.h"
17 #include "imv_workitem.h"
20 #include <utils/debug.h>
26 * global debug output variables
28 static int debug_level
= 2;
29 static bool stderr_quiet
= FALSE
;
34 static void stderr_dbg(debug_t group
, level_t level
, char *fmt
, ...)
38 if (level
<= debug_level
)
43 vfprintf(stderr
, fmt
, args
);
44 fprintf(stderr
, "\n");
50 bool policy_start(database_t
*db
, int session_id
)
52 if (db
->execute(db
, NULL
,
53 "INSERT INTO workitems (session, type, argument, "
54 "rec_fail, rec_noresult) VALUES (?, ?, ?, ?, ?)",
55 DB_INT
, session_id
, DB_INT
, IMV_WORKITEM_PACKAGES
,
57 DB_INT
, TNC_IMV_ACTION_RECOMMENDATION_ISOLATE
,
58 DB_INT
, TNC_IMV_ACTION_RECOMMENDATION_NO_ACCESS
) != 1)
62 if (db
->execute(db
, NULL
,
63 "INSERT INTO workitems (session, type, argument, "
64 "rec_fail, rec_noresult) VALUES (?, ?, ?, ?, ?)",
65 DB_INT
, session_id
, DB_INT
, IMV_WORKITEM_FORWARDING
,
67 DB_INT
, TNC_IMV_ACTION_RECOMMENDATION_ISOLATE
,
68 DB_INT
, TNC_IMV_ACTION_RECOMMENDATION_NO_ACCESS
) != 1)
72 if (db
->execute(db
, NULL
,
73 "INSERT INTO workitems (session, type, argument, "
74 "rec_fail, rec_noresult) VALUES (?, ?, ?, ?, ?)",
75 DB_INT
, session_id
, DB_INT
, IMV_WORKITEM_TCP_SCAN
,
77 DB_INT
, TNC_IMV_ACTION_RECOMMENDATION_NO_ACCESS
,
78 DB_INT
, TNC_IMV_ACTION_RECOMMENDATION_NO_ACCESS
) != 1)
86 bool policy_stop(database_t
*db
, int session_id
)
88 return db
->execute(db
, NULL
,
89 "DELETE FROM workitems WHERE session = ?",
90 DB_UINT
, session_id
) > 0;
93 int main(int argc
, char *argv
[])
96 char *uri
, *tnc_session_id
;
100 /* enable attest debugging hook */
103 atexit(library_deinit
);
105 /* initialize library */
106 if (!library_init(NULL
))
108 exit(SS_RC_LIBSTRONGSWAN_INTEGRITY
);
110 if (!lib
->plugins
->load(lib
->plugins
, NULL
,
111 lib
->settings
->get_str(lib
->settings
, "imv_policy_manager.load",
114 exit(SS_RC_INITIALIZATION_FAILED
);
120 exit(SS_RC_INITIALIZATION_FAILED
);
122 if (streq(argv
[1], "start"))
126 else if (streq(argv
[1], "stop"))
133 exit(SS_RC_INITIALIZATION_FAILED
);
137 tnc_session_id
= getenv("TNC_SESSION_ID");
140 fprintf(stderr
, "environment variable TNC_SESSION_ID is not defined\n");
141 exit(SS_RC_INITIALIZATION_FAILED
);
143 session_id
= atoi(tnc_session_id
);
145 /* attach database */
146 uri
= lib
->settings
->get_str(lib
->settings
, "imv_policy_manager.database",
147 "sqlite:///etc/pts/config.db");
148 db
= lib
->db
->create(lib
->db
, uri
);
151 fprintf(stderr
, "opening database failed.\n");
152 exit(SS_RC_INITIALIZATION_FAILED
);
157 success
= policy_start(db
, session_id
);
161 success
= policy_stop(db
, session_id
);
165 fprintf(stderr
, "imv_policy_manager %s %s\n", start
? "start" : "stop",
166 success
? "successful" : "failed");