예제 #1
0
int main(int argc, const char **argv)
{
	struct ldb_context *ldb;
	struct ldb_result *resultMsg;
	int i;

	/*
	  This is the always the first thing you want to do in an LDB
	  application - initialise up the context structure.

	  Note that you can use the context structure as a parent
	  for talloc allocations as well
	*/
	ldb = ldb_init(NULL);

	/*
	  We now open the database. In this example we just hard code the connection path.

	  Also note that the database is being opened read-only. This means that the 
	  call will fail unless the database already exists. 
	*/
	if (LDB_SUCCESS != ldb_connect(ldb, "tdb://tdbtest.ldb", LDB_FLG_RDONLY, NULL) ){
		printf("Problem on connection\n");
		exit(-1);
	}

	/*
	  At this stage we have an open database, and can start using it. It is opened
	  read-only, so a query is possible. 

	  We construct a search that just returns all the (sensible) contents. You can do
	  quite fine grained results with the LDAP search syntax, however it is a bit
	  confusing to start with. See RFC2254.
	*/
	if (LDB_SUCCESS != ldb_search(ldb, ldb, &resultMsg, NULL, LDB_SCOPE_DEFAULT,
				      NULL, "(dn=*)") ) {
		printf("Problem in search\n");
		exit(-1);
	}
	
	printf("%i records returned\n", resultMsg->count);

	/*
	  We can now iterate through the results, writing them out
	  (to standard output) with our custom output routine as defined
	  at the top of this file
	*/
	for (i = 0; i < resultMsg->count; ++i) {
		struct ldb_ldif ldifMsg;

		printf("Message: %i\n", i+1);
		
		ldifMsg.changetype = LDB_CHANGETYPE_NONE;
		ldifMsg.msg = resultMsg->msgs[i];
		ldb_ldif_write(ldb, vprintf_fn, NULL, &ldifMsg);
	}

	/*
	  There are two objects to clean up - the result from the 
	  ldb_search() query, and the original ldb context.
	*/
	talloc_free(resultMsg);

	talloc_free(ldb);

	return 0;
}
예제 #2
0
int main(int argc, const char **argv)
{
	struct ldb_context *ldb;
	FILE *fileStream;
	struct ldb_ldif *ldifMsg;

	if (argc != 2) {
		printf("Usage %s filename.ldif\n", argv[0]);
		exit(1);
	}

	/*
	  This is the always the first thing you want to do in an LDB
	  application - initialise up the context structure.

	  Note that you can use the context structure as a parent
	  for talloc allocations as well
	*/
	ldb = ldb_init(NULL);

	fileStream = fopen(argv[1], "r");
	if (0 == fileStream) {
		perror(argv[1]);
		exit(1);
	}

	/*
	  We now work through the filestream to get each entry.
	*/
	while ( (ldifMsg = ldb_ldif_read_file(ldb, fileStream)) ) {
		/*
		  Each message has a particular change type. For Add,
		  Modify and Delete, this will also appear in the
		  output listing (as changetype: add, changetype:
		  modify or changetype:delete, respectively).
		*/
		switch (ldifMsg->changetype) {
		case LDB_CHANGETYPE_NONE:
			printf("ChangeType: None\n");
			break;
		case LDB_CHANGETYPE_ADD:
			printf("ChangeType: Add\n");
			break;
		case LDB_CHANGETYPE_MODIFY:
			printf("ChangeType: Modify\n");
			break;
		case LDB_CHANGETYPE_DELETE:
			printf("ChangeType: Delete\n");
			break;
		default:
			printf("ChangeType: Unknown\n");
		}

		/*
		  We can now write out the results, using our custom
		  output routine as defined at the top of this file. 
		*/
		ldb_ldif_write(ldb, vprintf_fn, NULL, ldifMsg);

		/*
		  Clean up the message
		*/
		ldb_ldif_read_free(ldb, ldifMsg);
	}

	/*
	  Clean up the context
	*/
	talloc_free(ldb);

	return 0;
}