netatalk  4.6.1
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
afppasswd_migrate.c File Reference
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <pwd.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <atalk/compat.h>
#include <atalk/srp.h>
#include "afppasswd_migrate.h"

Go to the source code of this file.

Data Structures

struct  migrate_record
 

Macros

#define MIGRATE_ATTEMPTS   10000
 

Enumerations

enum  restore_result { RESTORE_FAILED , RESTORE_CLEANUP_INCOMPLETE , RESTORE_COMPLETE }
 

Functions

static int lookup_uid (const char *name, uid_t *uid)
 
static int split_path (const char *path, char parent[MAXPATHLEN+1], char basename[MAXPATHLEN+1])
 
static int validate_parent (int fd, const char *path, uid_t administrator_uid)
 
static int validate_source (int fd, const char *path, uid_t administrator_uid, struct stat *st)
 
static void free_records (struct migrate_record *records, size_t count)
 
static int add_record (struct migrate_record **records, size_t *count, size_t *capacity, const char *line, size_t length, size_t source_length, size_t line_number)
 
static int read_records (int source_fd, struct migrate_record **records, size_t *count)
 
static int source_unchanged (int source_fd, const struct migrate_record *records, size_t count)
 
static int write_all (int fd, const char *data, size_t length)
 
static int uid_filename (uid_t uid, char *name, size_t size)
 
static int create_verifiers (int directory_fd, const char *path, const struct migrate_record *records, size_t count, uid_t administrator_uid)
 
static void remove_staging (int parent_fd, const char *temporary_name, const struct migrate_record *records, size_t count)
 
static int create_staging_directory (int parent_fd, const char *basename, uid_t administrator_uid, char temporary_name[MAXPATHLEN+1])
 
static int source_still_at_path (int parent_fd, const char *basename, const struct stat *source_st)
 
static int reject_stale_staging (int parent_fd, const char *basename, const char *path)
 
static int link_backup (int parent_fd, const char *basename, char backup_name[MAXPATHLEN+1])
 
static enum restore_result restore_source (int parent_fd, const char *basename, const char *backup_name)
 
int afppasswd_migrate_srp (const char *path, uid_t administrator_uid)
 

Macro Definition Documentation

◆ MIGRATE_ATTEMPTS

#define MIGRATE_ATTEMPTS   10000

Enumeration Type Documentation

◆ restore_result

Enumerator
RESTORE_FAILED 
RESTORE_CLEANUP_INCOMPLETE 
RESTORE_COMPLETE 

Function Documentation

◆ add_record()

static int add_record ( struct migrate_record **  records,
size_t *  count,
size_t *  capacity,
const char *  line,
size_t  length,
size_t  source_length,
size_t  line_number 
)
static

◆ afppasswd_migrate_srp()

int afppasswd_migrate_srp ( const char *  path,
uid_t  administrator_uid 
)

◆ create_staging_directory()

static int create_staging_directory ( int  parent_fd,
const char *  basename,
uid_t  administrator_uid,
char  temporary_name[MAXPATHLEN+1] 
)
static

◆ create_verifiers()

static int create_verifiers ( int  directory_fd,
const char *  path,
const struct migrate_record *  records,
size_t  count,
uid_t  administrator_uid 
)
static

◆ free_records()

static void free_records ( struct migrate_record *  records,
size_t  count 
)
static

◆ link_backup()

static int link_backup ( int  parent_fd,
const char *  basename,
char  backup_name[MAXPATHLEN+1] 
)
static

◆ lookup_uid()

static int lookup_uid ( const char *  name,
uid_t *  uid 
)
static

◆ read_records()

static int read_records ( int  source_fd,
struct migrate_record **  records,
size_t *  count 
)
static

◆ reject_stale_staging()

static int reject_stale_staging ( int  parent_fd,
const char *  basename,
const char *  path 
)
static

◆ remove_staging()

static void remove_staging ( int  parent_fd,
const char *  temporary_name,
const struct migrate_record *  records,
size_t  count 
)
static

◆ restore_source()

static enum restore_result restore_source ( int  parent_fd,
const char *  basename,
const char *  backup_name 
)
static

◆ source_still_at_path()

static int source_still_at_path ( int  parent_fd,
const char *  basename,
const struct stat *  source_st 
)
static

◆ source_unchanged()

static int source_unchanged ( int  source_fd,
const struct migrate_record *  records,
size_t  count 
)
static

◆ split_path()

static int split_path ( const char *  path,
char  parent[MAXPATHLEN+1],
char  basename[MAXPATHLEN+1] 
)
static

◆ uid_filename()

static int uid_filename ( uid_t  uid,
char *  name,
size_t  size 
)
static

◆ validate_parent()

static int validate_parent ( int  fd,
const char *  path,
uid_t  administrator_uid 
)
static

◆ validate_source()

static int validate_source ( int  fd,
const char *  path,
uid_t  administrator_uid,
struct stat *  st 
)
static

◆ write_all()

static int write_all ( int  fd,
const char *  data,
size_t  length 
)
static