Mercurial > mplayer.hg
view dvdauth.c @ 544:b6cfefccd071
some updates, and libvo description completed
author | arpi_esp |
---|---|
date | Fri, 20 Apr 2001 11:56:41 +0000 |
parents | 888a85621f50 |
children | 22ed5f5821e2 |
line wrap: on
line source
/* (C)2001 by LGB (Gabor Lenart), based on example programs in libcss Some TODO: root privilegies really needed?? */ /* don't do anything with this source if css support was not requested */ #include "config.h" #ifdef HAVE_LIBCSS #include <stdio.h> #include <stdlib.h> #include <linux/cdrom.h> // FIXME #include <string.h> conflicts with #include <linux/fs.h> (below) //#include <string.h> // FIXME this conflicts with #include <linux/fs.h> #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ioctl.h> #include <sys/stat.h> #include <css.h> #include "dvdauth.h" char *dvd_device=NULL; unsigned char key_disc[2048]; unsigned char key_title[5]; #include <linux/fs.h> #ifndef FIBMAP #define FIBMAP 1 #endif static int path_to_lba ( int fd ) { int lba = 0; if (ioctl(fd, FIBMAP, &lba) < 0) { perror ("ioctl FIBMAP"); fprintf(stderr,"Hint: run mplayer as root!\n"); // close(fd); return -1; } return lba; } static void reset_agids ( int fd ) { dvd_authinfo ai; int i; for (i = 0; i < 4; i++) { memset(&ai, 0, sizeof(ai)); ai.type = DVD_INVALIDATE_AGID; ai.lsa.agid = i; ioctl(fd, DVD_AUTH, &ai); } } int dvd_auth ( char *dev , int fd ) { int devfd; /* FD of DVD device */ int lba; // printf("DVD: auth fd=%d on %s.\n",fd,dev); if ((devfd=open(dev,O_RDONLY))<0) { fprintf(stderr,"DVD: cannot open DVD device \"%s\".\n",dev); return 1; } /* reset AGIDs */ reset_agids(devfd); /* authenticate disc */ if (CSSAuthDisc(devfd,key_disc)) { fprintf(stderr,"DVD: CSSAuthDisc() failed.\n"); return 1; } /* authenticate title */ lba=path_to_lba(fd); if (lba==-1) { fprintf(stderr,"DVD: path_to_lba() failed.\n"); return 1; } if (CSSAuthTitle(devfd,key_title,lba)) { fprintf(stderr,"DVD: CSSAuthTitle() failed.\n"); return 1; } /* decrypting title */ if (CSSDecryptTitleKey (key_title, key_disc) < 0) { fprintf(stderr,"DVD: CSSDecryptTitleKey() failed.\n"); return 1; } close(devfd); return 0; } #endif