mirror of
				https://github.com/nitnelave/lldap.git
				synced 2023-04-12 14:25:13 +00:00 
			
		
		
		
	Merge branch 'main' of https://github.com/nitnelave/lldap into feature/avatar-display
This commit is contained in:
		
						commit
						d60d869eba
					
				@ -28,13 +28,14 @@ If it succeeds, you can proceed to the next step.
 | 
			
		||||
 | 
			
		||||
## Create a dump of existing data
 | 
			
		||||
 | 
			
		||||
We want to dump (almost) all existing values to some file - the exception being the `metadata` table. Be sure to stop/pause LLDAP during this step, as some
 | 
			
		||||
We want to dump (almost) all existing values to some file - the exception being the `metadata` table (and sometimes
 | 
			
		||||
the `sqlite_sequence` table, when it exists). Be sure to stop/pause LLDAP during this step, as some
 | 
			
		||||
databases (SQLite in this example) will give an error if LLDAP is in the middle of a write. The dump should consist just INSERT
 | 
			
		||||
statements. There are various ways to do this, but a simple enough way is filtering a
 | 
			
		||||
whole database dump. For example:
 | 
			
		||||
whole database dump. This repo contains [a script](/scripts/sqlite_dump_commands.sh) to generate SQLite commands for creating an appropriate dump:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
sqlite3 /path/to/lldap/config/users.db .dump | grep "^INSERT" | grep -v "^INSERT INTO metadata" > /path/to/dump.sql
 | 
			
		||||
./sqlite_dump_commands.sh | sqlite3 /path/to/lldap/config/users.db > /path/to/dump.sql
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Sanitize data
 | 
			
		||||
@ -56,12 +57,25 @@ sed -i -r -e "s/X'([[:xdigit:]]+'[^'])/'\\\x\\1/g" \
 | 
			
		||||
 | 
			
		||||
### To MySQL
 | 
			
		||||
 | 
			
		||||
MySQL mostly cooperates, but it gets some errors if you don't escape the `groups` table. Run the
 | 
			
		||||
MySQL mostly cooperates, but it gets some errors if you don't escape the `groups` table. It also uses
 | 
			
		||||
backticks to escape table name instead of quotes.  Run the
 | 
			
		||||
following command to wrap all table names in backticks for good measure, and wrap the inserts in
 | 
			
		||||
a transaction:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
sed -i -r -e 's/^INSERT INTO ([a-zA-Z0-9_]+) /INSERT INTO `\1` /' \
 | 
			
		||||
sed -i -r -e 's/^INSERT INTO "?([a-zA-Z0-9_]+)"?/INSERT INTO `\1`/' \
 | 
			
		||||
-e '1s/^/START TRANSACTION;\n/' \
 | 
			
		||||
-e '$aCOMMIT;' /path/to/dump.sql
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### To MariaDB
 | 
			
		||||
 | 
			
		||||
While MariaDB is supposed to be identical to MySQL, it doesn't support timezone offsets on DATETIME
 | 
			
		||||
strings. Use the following command to remove those and perform the additional MySQL sanitization:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
sed -i -r -e "s/([^']'[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{9})\+00:00'([^'])/\1'\2/g" \
 | 
			
		||||
-e 's/^INSERT INTO "?([a-zA-Z0-9_]+)"?/INSERT INTO `\1`/' \
 | 
			
		||||
-e '1s/^/START TRANSACTION;\n/' \
 | 
			
		||||
-e '$aCOMMIT;' /path/to/dump.sql
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										9
									
								
								scripts/sqlite_dump_commands.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								scripts/sqlite_dump_commands.sh
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
			
		||||
#! /bin/bash
 | 
			
		||||
 | 
			
		||||
tables=("users" "groups" "memberships" "jwt_refresh_storage" "jwt_storage" "password_reset_tokens")
 | 
			
		||||
echo ".header on"
 | 
			
		||||
 | 
			
		||||
for table in ${tables[@]}; do
 | 
			
		||||
    echo ".mode insert $table"
 | 
			
		||||
    echo "select * from $table;"
 | 
			
		||||
done
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user