Auto-generate the SOGoSAML2Exceptions helper module
parent
bc2b003676
commit
e02221d716
|
@ -143,9 +143,13 @@ SOGo_RESOURCE_FILES = \
|
||||||
DAVReportMap.plist
|
DAVReportMap.plist
|
||||||
|
|
||||||
ifeq ($(saml2_config), yes)
|
ifeq ($(saml2_config), yes)
|
||||||
SOGo_HEADER_FILES += SOGoSAML2Session.h
|
SOGo_HEADER_FILES += SOGoSAML2Session.h SOGoSAML2Exceptions.h
|
||||||
SOGo_OBJC_FILES += SOGoSAML2Session.m
|
SOGo_OBJC_FILES += SOGoSAML2Session.m SOGoSAML2Exceptions.m
|
||||||
SOGo_RESOURCE_FILES += SOGoSAML2Metadata.xml
|
SOGo_RESOURCE_FILES += SOGoSAML2Metadata.xml
|
||||||
|
|
||||||
|
SOGoSAML2Exceptions.h SOGoSAML2Exceptions.m: gen-saml2-exceptions.py
|
||||||
|
$(ECHO_CREATING) ./gen-saml2-exceptions.py $(LASSO_CFLAGS) $(END_ECHO)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(ldap_config),yes)
|
ifeq ($(ldap_config),yes)
|
||||||
|
|
|
@ -0,0 +1,158 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
include_dirs = []
|
||||||
|
|
||||||
|
output = "-"
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
m_template = """/* %(module)s.m (auto-generated) */
|
||||||
|
|
||||||
|
#include <objc/objc.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#import <Foundation/NSDictionary.h>
|
||||||
|
#import <Foundation/NSString.h>
|
||||||
|
#import <Foundation/NSValue.h>
|
||||||
|
|
||||||
|
#import "%(module)s.h"
|
||||||
|
|
||||||
|
%(exception_init)s
|
||||||
|
|
||||||
|
static NSMutableDictionary *exceptionTable = nil;
|
||||||
|
|
||||||
|
@implementation NSException (SOGoSAML2Extension)
|
||||||
|
|
||||||
|
static void
|
||||||
|
InitExceptionTable ()
|
||||||
|
{
|
||||||
|
exceptionTable = [NSMutableDictionary new];
|
||||||
|
%(exception_table_init)s
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void) raiseSAML2Exception: (lasso_error_t) lassoError
|
||||||
|
{
|
||||||
|
NSString *exceptionName, *reason;
|
||||||
|
|
||||||
|
if (!exceptionTable)
|
||||||
|
InitExceptionTable ();
|
||||||
|
|
||||||
|
exceptionName = [exceptionTable objectForKey: [NSNumber numberWithInt: lassoError]];
|
||||||
|
if (!exceptionName)
|
||||||
|
exceptionName = NSGenericException;
|
||||||
|
|
||||||
|
reason = [NSString stringWithUTF8String: lasso_strerror (lassoError)];
|
||||||
|
if (!reason)
|
||||||
|
reason = @"unspecified";
|
||||||
|
|
||||||
|
[self raise: exceptionName format: @"%%@", reason];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
"""
|
||||||
|
|
||||||
|
h_template = """/* %(module)s.h (auto-generated) */
|
||||||
|
|
||||||
|
#ifndef %(h_exclusion)s
|
||||||
|
#define %(h_exclusion)s 1
|
||||||
|
|
||||||
|
#include <lasso/errors.h>
|
||||||
|
#import <Foundation/NSException.h>
|
||||||
|
|
||||||
|
@class NSString;
|
||||||
|
|
||||||
|
%(exception_decls)s
|
||||||
|
|
||||||
|
@interface NSException (SOGoSAML2Extension)
|
||||||
|
|
||||||
|
+ (void) raiseSAML2Exception: (lasso_error_t) lassoError;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif /* %(h_exclusion)s */
|
||||||
|
"""
|
||||||
|
|
||||||
|
def ParseErrorsHLine(line):
|
||||||
|
result = None
|
||||||
|
if line.startswith("#define LASSO_"):
|
||||||
|
next_space = line.find(" ", 19)
|
||||||
|
result = line[8:next_space]
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def ParseIncludeDirs(args):
|
||||||
|
dirs = ["/usr/include", "/usr/local/include"]
|
||||||
|
ignore = True
|
||||||
|
for arg in args:
|
||||||
|
if ignore:
|
||||||
|
if arg == "-I":
|
||||||
|
ignore = False
|
||||||
|
elif arg.startswith("-I"):
|
||||||
|
dirs.append(arg[2:])
|
||||||
|
else:
|
||||||
|
dirs.append(arg)
|
||||||
|
ignore = True
|
||||||
|
|
||||||
|
return dirs
|
||||||
|
|
||||||
|
def FindHFile(args, filename):
|
||||||
|
found = None
|
||||||
|
|
||||||
|
include_dirs = ParseIncludeDirs(args)
|
||||||
|
for dirname in include_dirs:
|
||||||
|
full_filename = "%s/%s" % (dirname, filename)
|
||||||
|
if os.path.exists(full_filename):
|
||||||
|
found = full_filename
|
||||||
|
|
||||||
|
if found is None:
|
||||||
|
raise Exception, "'%s' not found in include dirs" % filename
|
||||||
|
|
||||||
|
return found
|
||||||
|
|
||||||
|
def ErrorCodeToName(name):
|
||||||
|
parts = name.split("_")
|
||||||
|
cap_parts = [part.capitalize() for part in parts]
|
||||||
|
|
||||||
|
return "".join(cap_parts)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
errors_filename = FindHFile(sys.argv, os.path.join("lasso", "errors.h"))
|
||||||
|
|
||||||
|
inf = open(errors_filename)
|
||||||
|
error_codes = {}
|
||||||
|
line = inf.readline()
|
||||||
|
while line != "":
|
||||||
|
error_code = ParseErrorsHLine(line)
|
||||||
|
if error_code:
|
||||||
|
error_codes[error_code] = ErrorCodeToName(error_code)
|
||||||
|
line = inf.readline()
|
||||||
|
inf.close()
|
||||||
|
|
||||||
|
exception_decls = []
|
||||||
|
exception_init = []
|
||||||
|
exception_table_init = []
|
||||||
|
|
||||||
|
exc_table_format \
|
||||||
|
= (" [exceptionTable setObject: %s\n"
|
||||||
|
" forKey: [NSNumber numberWithInt: %s]];")
|
||||||
|
for error_code in error_codes:
|
||||||
|
name = error_codes[error_code];
|
||||||
|
exception_init.append("NSString * const %s = @\"%s\";" % (name, name))
|
||||||
|
exception_decls.append("extern NSString * const %s;" % name)
|
||||||
|
exception_table_init.append(exc_table_format % (name, error_code))
|
||||||
|
|
||||||
|
module = "SOGoSAML2Exceptions"
|
||||||
|
outvars = {"module": module,
|
||||||
|
"h_exclusion": "%s_H" % module.upper(),
|
||||||
|
"exception_decls": "\n".join(exception_decls),
|
||||||
|
"exception_init": "\n".join(exception_init),
|
||||||
|
"exception_table_init": "\n".join(exception_table_init)}
|
||||||
|
|
||||||
|
outf = open("%s.m" % module, "w+")
|
||||||
|
outf.write(m_template % outvars)
|
||||||
|
outf.close()
|
||||||
|
|
||||||
|
outf = open("%s.h" % module, "w+")
|
||||||
|
outf.write(h_template % outvars)
|
||||||
|
outf.close()
|
Loading…
Reference in New Issue