#!/bin/sh exec smbscript "$0" ${1+"$@"} /* work out the minimal schema for the existing records on a server by examining all records and working out what objectclasses and attributes exist */ libinclude("base.js"); var ldb = ldb_init(); var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA", "POPT_COMMON_CREDENTIALS"); if (options == undefined) { println("Failed to parse options"); return -1; } if (options.ARGV.length != 1) { println("Usage: minschema.js "); return -1; } var url = options.ARGV[0]; var ok = ldb.connect(url); assert(ok); objectclasses = new Object(); attributes = new Object(); /* process an individual record, working out what attributes it has */ function walk_dn(ldb, dn) { /* get a list of all possible attributes for this object */ var attrs = new Array("allowedAttributes"); var res = ldb.search("objectClass=*", dn, ldb.SCOPE_BASE, attrs); if (res == undefined) { printf("Unable to fetch allowedAttributes for '%s' - %s\n", dn, ldb.errstring()); return; } var allattrs = res[0].allowedAttributes; res = ldb.search("objectClass=*", dn, ldb.SCOPE_BASE, allattrs); if (res == undefined) { printf("Unable to fetch all attributes for '%s' - %s\n", dn, ldb.errstring()); return; } var a; var msg = res[0]; for (a in msg) { attributes[a] = a; } } /* walk a naming context, looking for all records */ function walk_naming_context(ldb, namingContext) { var attrs = new Array("objectClass"); var res = ldb.search("objectClass=*", namingContext, ldb.SCOPE_DEFAULT, attrs); if (res == undefined) { printf("Unable to fetch objectClasses for '%s' - %s\n", namingContext, ldb.errstring()); return; } var r; for (r=0;r