netatalk  4.6.0
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()

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()

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

◆ create_verifiers()

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

◆ free_records()

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

◆ link_backup()

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

◆ lookup_uid()

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

◆ read_records()

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

◆ reject_stale_staging()

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

◆ remove_staging()

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

◆ restore_source()

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

◆ source_still_at_path()

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

◆ source_unchanged()

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

◆ split_path()

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

◆ uid_filename()

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

◆ validate_parent()

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

◆ validate_source()

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

◆ write_all()

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